Мне нужно сделать расчет за несколько лет. Конечно, я мог бы назвать макрос для каждого года отдельно. Однако я бы предпочел вызывать макрос только один раз и работать с дополнительными вложенными индексными циклами (!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_2015
и test_prevyear_2014
. Что не так? Я просто не понимаю Я думал, что это сначала работает с года = 2011 и проходит все предыдущие годы. После этого он работает с 2012 годом и снова проходит все предыдущие годы. И так далее.