SPSS:很难使用LOOP和COMPUTE创建一组变量

时间:2015-05-11 01:06:02

标签: spss

我试图使用LOOP和COMPUTE创建一组变量,但是很难。当我运行下面的代码时,我得到3个错误。这些对应于Bolded STRING和字符串下面的缩进COMPUTE命令:

  • 命令:STRING"无法识别指定的格式。文字:#H"
  • 命令:COMPUTE"在a之后预期找不到等号 COMPUTE命令中的目标变量。文字:(
  • 命令:COMPUTE"在a之后预期找不到等号 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.

1 个答案:

答案 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.