Sas 如何在下面的问题中使用循环?

Sas 如何在下面的问题中使用循环?,sas,Sas,我想循环一些变量并创建九个新变量,如果前三个变量是“433”或“434”,那么它们等于1。我正在使用下面的代码,但它显示1的一切,有人可以帮助吗 data icd_dim; set asg3; array icd (9) $ ICD9_DGNS_CD_1-ICD9_DGNS_CD_9; array flag_icd (9) flag_icd_1-flag_icd_9; do i = 1 to 9; if icd(i)=substr(icd(i),1,3)="433" OR "434" then

我想循环一些变量并创建九个新变量,如果前三个变量是“433”或“434”,那么它们等于1。我正在使用下面的代码,但它显示1的一切,有人可以帮助吗

data icd_dim;
set asg3;
array icd (9) $ ICD9_DGNS_CD_1-ICD9_DGNS_CD_9;
array flag_icd (9) flag_icd_1-flag_icd_9;
do i = 1 to 9;
if icd(i)=substr(icd(i),1,3)="433" OR "434" then flag_icd(i)=1; end;
run;


您正在查找中的
运算符,以将一个值与一个值列表进行比较。您当前的代码正在测试
“433”
是否为真。因为它是非空的,所以它被视为真的

你想要:

if substr(icd(i),1,3) in ("433" "434") then flag_icd(i)=1; 
或者,为了消除缺少的值,只需将测试结果分配给变量,并获得1(true)或0(false)


in:
运算符是字符值的前缀比较运算符。您可能还需要一个更能描述诊断的标志变量名

occlusion_flag(i) = icd(i) in: ('433', '434');
您认为
(“433”或“434”)
的计算结果是什么?这是对的还是错的?你是说“前三个字符”而不是“第一个变量”?
occlusion_flag(i) = icd(i) in: ('433', '434');