首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPSS:很难用循环和计算创建一组变量。

SPSS:很难用循环和计算创建一组变量。
EN

Stack Overflow用户
提问于 2015-05-11 01:06:01
回答 1查看 520关注 0票数 0

我试图使用循环和计算来创建一组变量,但是遇到了困难。当我运行下面的代码时,我会发现下面有3个bug。它们对应于字符串下面的粗体字符串和缩进计算命令:

  • 命令: STRING“指定的格式不可识别。文本:#H”
  • 命令:计算“当预期在计算命令中的目标变量之后找不到等号。
  • 命令:计算“当预期在计算命令中的目标变量之后找不到等号。

基本上,我的目标是创建一系列变量,GLD_935、GLD_940、GLD_945等等,但不是创建变量。有什么想法吗?

代码语言:javascript
复制
DATASET ACTIVATE  GLD_5.    
STRING H2 (A2).    
STRING M2 (A2).    
STRING X (A5).    
STRING Y (A8).    
LOOP #H = 9 TO 14 BY 1.    
LOOP #M = 00 TO 55 BY 5.    
   COMPUTE H2 = STRING(#H,F2.0).
   IF (LENGTH(H2) = 1) H2 = CONCAT("0",H2).    
   COMPUTE M2 = STRING(#M,F2.0).    
   IF (LENGTH(M2) = 1) M2 = CONCAT("0",M2).    
   COMPUTE X = CONCAT(H2,":",M2).    
   **STRING GLD_(#H)(#M) (A8).**    
   DO IF (TIME = X).    
      **COMPUTE GLD_(#H)(#M) = GLD5_Close.**
   END IF.    
   DO IF (TIME ~= X).    
      **COMPUTE  GLD_(#H)(#M) = LAG(Y,1).**     
   END IF.    
END LOOP.
END LOOP.
EXECUTE.
EN

回答 1

Stack Overflow用户

发布于 2015-05-11 07:45:28

我不认为您可以在这里尝试将矢量索引加倍(而且需要预先初始化它们):

代码语言:javascript
复制
STRING GLD_(#H)(#M) (A8).

因此,我倾向于使用SPSS宏功能、定义/!或来实现这一点。下面我给出一个例子,尽管我没有试图完全复制您的需求,但仍然给您足够的适应需求的能力。

代码语言:javascript
复制
DATASET CLOSE ALL.
OUTPUT CLOSE ALL.
NEW FILE.
DATA LIST FREE / ID (F8.0) TIME (A1).
BEGIN DATA.
1 1
2 2 
11 1
12 2
END DATA.
DATASET NAME DSRaw.

/* Note you can create a string with leading zeros, taking advantage of the N format */.
STRING IDStr (A2).
COMPUTE IDStr=STRING(ID, N2).

DEFINE !RunJob ()
!DO !h = 9 !TO 14

  !IF (!LEN(!h)=1) !THEN
    !LET !hpad=!CONCAT("0",!h)
  !ELSE
    !LET !hpad=!h
  !IFEND

  !DO !m = 0 !TO 55 !BY 5

    !IF (!LEN(!m)=1) !THEN
      !LET !mpad=!CONCAT("0",!m)
    !ELSE
      !LET !mpad=!m
    !IFEND

    IF (TIME = CONCAT(STRING(!h,N2),":",STRING(!m,N2))) !CONCAT("GLD_",!hpad,"_",!mpad)=1.

  !DOEND
!DOEND
!ENDDEFINE.


SET MPRINT ON.
!RunJob.
SET MPRINT OFF.

下面是一个等价的python解决方案:

代码语言:javascript
复制
BEGIN PROGRAM PYTHON.
for h in xrange(9,15):
    for m in xrange(0,56,5):
        spss.Submit("""IF (TIME = '%(h)02d:%(m)02d') GLD_%(h)02d_%(m)02d=1.""" % locals())
END PROGRAM.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30158325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档