我试图使用LOOP和COMPUTE创建一组变量,但是很难。当我运行下面的代码时,我得到3个错误。这些对应于Bolded STRING和字符串下面的缩进COMPUTE命令:
基本上我的目标是创建一系列变量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.
答案 0 :(得分:1)
我不认为您可以在此处尝试双重索引VECTORS(也需要事先初始化):
STRING GLD_(#H)(#M) (A8).
因此,我倾向于使用SPSS宏功能,DEFINE / !ENDDEFINE或SPSS集成的Python可编程性来实现这一点。我在下面给出一个例子,虽然不是试图完全复制你的要求,但仍然足以让你适应你的需要。
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.