我有一个变量用于一年中的每个月,其值为1(表示已在该月检查过的东西)或SYSMIS。
如何将其重新编码为新变量,例如VAR1我得到的东西像
0 = no checks in a year
1 = 1 check in a year
2 = 2 checks in a year every six months
3 = 2+ checks in a year (where 2 of them were six months apart)
作为替代方案,我一直在使用一个系统来计算那一年的总支票,然后查看是否有0,1或2+支票,但这不准确,因为我看不出是否有两张支票相隔六个月或连续两个月
NUMERIC var1_Total (F3.0).
COMPUTE var1_Total=varA.1+varA.2+varA.3+varA.4+varA.5+varA.6+varA.7+varA.8+varA.9+varA.10+varA.11+varA.12.
EXECUTE.
NUMERIC var2 (F5.0).
VALUE LABELS var2 0 '0' 1 '1' 2 '>=2'.
IF (var1_Total=0) var2=0.
IF (var1_Total=1) var2=1.
IF (var1_Total>=2) var2=2.
EXECUTE.
答案 0 :(得分:1)
假设varA.1
到varA.12
在数据文件中是连续的顺序,并假设当月出现的某些东西由数字代码1表示:
COMPUTE var1_Total=sum(varA.1 to varA.12).
RECODE var1_Total (3 THRU HI=3).
答案 1 :(得分:1)
所以你需要的是一个指示变量,告诉你相隔六个月至少有两次检查,对吗?
这样做:
* Check if one of the pairs (varA.1, varA.7; varA.2, varA.8; ...) both have the value 1.
DO REPEAT var_p1=varA.1 TO varA.6
/var_p2=varA.7 TO varA.12.
IF (var_p1=1 AND var_p2=1) six_month = 1.
END REPEAT.
然后你可以调整IF命令:
* Note that cases with var1_total>=2 but without checks six month apart will get the value 1.
IF (var1_Total=0) var2=0.
IF (var1_Total>=1) var2=1.
IF (var1_Total=2 AND six_month) var2=2.
IF (var1_Total>2 AND six_month) var2=3.
EXECUTE.