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

问题描述 投票:0回答:1

我需要做几年的计算。我当然可以分别每年命名该宏。但是,我希望只调用一次宏,并使用其他嵌套的索引循环(!DO !var = x !TO y)。

我的问题是,我现在还需要包含计算的!IF-!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("path\anyname_",!year,".sps"))
     /"DEFINE @bedingung() ", prevyear, " !ENDDEFINE.".
    END IF.
    EXE.  

    INSERT FILE = !QUOTE(!CONCAT("path\anyname_",!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。怎么了?我就是不明白。我认为它首先适用于year = 2011并经历了所有上一个年份。之后,它将与year = 2012一起使用,并再次遍历所有上一个年份。依此类推。

spss
1个回答
0
投票

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

SPSS宏的另一个限制使得很难在两个单独的日期数组上循环-这在这里是很自然的解决方案(see my answer here for an idea about how to do that)。

STILL-这是关于如何在此处获得相同效果的可能建议:

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

在此循环中,在每次迭代结束时,!prevyr参数接收值或!year参数,并准备进行下一次迭代。

© www.soinside.com 2019 - 2024. All rights reserved.