我试图使用循环和计算来创建一组变量,但是遇到了困难。当我运行下面的代码时,我会发现下面有3个bug。它们对应于字符串下面的粗体字符串和缩进计算命令:
基本上,我的目标是创建一系列变量,GLD_935、GLD_940、GLD_945等等,但不是创建变量。有什么想法吗?
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.发布于 2015-05-11 07:45:28
我不认为您可以在这里尝试将矢量索引加倍(而且需要预先初始化它们):
STRING GLD_(#H)(#M) (A8).因此,我倾向于使用SPSS宏功能、定义/!或来实现这一点。下面我给出一个例子,尽管我没有试图完全复制您的需求,但仍然给您足够的适应需求的能力。
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解决方案:
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.https://stackoverflow.com/questions/30158325
复制相似问题