SPSS和!中的嵌套宏!如果-!THEN命令,以计算为条件



我需要做几年的计算。当然,我可以把每年的宏观经济分别称为宏观经济。但是,我更愿意只调用一次宏,并使用其他嵌套索引循环(!DO !var = x !TO y(。

我现在的问题是,我还需要一个!如果-!包含计算的THEN条件:!IF (!year = !prev_year+1) !THEN然而,这似乎是不可能的。然后,我用一个额外的语法写下了计算的第二部分,然后插入。它有效,但不正常。下面是一个语法示例。

DEFINE !change_hh (lastyear = !TOKENS(1) / lastyear_minus_1=!TOKENS(1) / bedingung = !TOKENS(1) / eyear = !TOKENS(1))
!DO !year= 2011 !TO !lastyear.
!DO !prevyear= 2010 !TO !lastyear_minus_1.
COMPUTE prevyear= !year-1.
exe.
ALTER TYPE prevyear (F4.0).
DO IF $casenum = 1.
WRITE OUTFILE=!QUOTE(!CONCAT("pathanyname_",!year,".sps"))
/"DEFINE @bedingung() ", prevyear, " !ENDDEFINE.".
END IF.
EXE.  
INSERT FILE = !QUOTE(!CONCAT("pathanyname_",!year,".sps")). 
!IF (!prevyear= !EVAL(!bedingung)) !THEN
COMPUTE !CONCAT("test_year_",!eyear) = !eyear.
COMPUTE !CONCAT("test_prevyear_",!prevyear) = !prevyear.
exe.
!IFEND.
!DOEND.
!DOEND.
EXE.
!ENDDEFINE.
!change_hh lastyear_minus_1 = 2014 lastyear= 2015 bedingung = @bedingung eyear = @jahr.

我只得到变量test_year_2015test_prevyear_2014。怎么了?我就是不明白。我认为它第一次工作是在2011年,并贯穿了所有的前几年。之后,它与年份=2012一起工作,并再次经历所有前几年。等等。

SPSS宏只能使用宏参数作为(文本(构建块来创建语法。除其他限制外,这意味着宏不能像!IF (!year = !prev_year+1) !then那样对参数执行数学运算。

SPSS宏的另一个限制是很难在两个独立的日期数组上循环——这在这里是一个自然的解决方案(关于如何做到这一点,请参阅我的答案(。

仍然-这里有一个关于如何在这里获得相同效果的可能建议:

define ....
.....
!let !prevyr="2010"
!do !year= 2011 !to !lastyear.
... use arguments !year and !prevyr ....
!let !prevyr=!year
!doend

在这个循环中,在每次迭代结束时,!prevyr参数接收值或!year参数,并为下一次迭代做好准备。

最新更新