If statement sas if then else语句
我有下面的代码,我需要它将elig_因子[2]设置为1,当状态为=1且hudadmin为1或2或3时,否则设置elgi_因子[2]=0。但它将elig_因子[2]=0。有人能帮忙吗If statement sas if then else语句,if-statement,sas,If Statement,Sas,我有下面的代码,我需要它将elig_因子[2]设置为1,当状态为=1且hudadmin为1或2或3时,否则设置elgi_因子[2]=0。但它将elig_因子[2]=0。有人能帮忙吗 if ("&r_start" eq 1) then do; if ( 2011<=built <= 2014) then elig_factor[1] = '1'; else elig_factor[1] = '0'; if (status eq '1' and hudadmin eq
if ("&r_start" eq 1) then
do;
if ( 2011<=built <= 2014) then elig_factor[1] = '1';
else elig_factor[1] = '0';
if (status eq '1' and hudadmin eq '1') then elig_factor[2] = '1';
else elig_factor[2] = '0';
if (status eq '1' and hudadmin eq '2') then elig_factor[2] = '1';
else elig_factor[2] = '0';
if (status eq '1' and hudadmin eq '3') then elig_factor[2] = '1';
else elig_factor[2] = '0';
if (np_all gt 0) then elig_factor[3] = '1';
else elig_factor[3] = '0';
if (np_black gt 0) then elig_factor[4] = '1';
else elig_factor[4] = '0';
if (np_age65 gt 0) then elig_factor[5] = '1';
else elig_factor[5] = '0';
if (np_hisp gt 0) then elig_factor[6] = '1';
else elig_factor[6] = '0';
elig_factor[7] = occ;
elig_factor[8] =vac;
end;
如果(“&r_start”等式1),则
做
如果(2011当你说:
当状态为=1且HUDAMIN为1或2或3时
我不知道您为什么没有在这里使用
操作符中的
无论如何,要解释您的代码实际上在做什么:
依次计算每个if
语句,忽略过去if
语句的结果。因此,如果出现hudadmin=1
的情况,则触发第一个if
语句,将elig_因子[2]
设置为'1'
,则忽略后续的else
当到达第二个if
语句时,它被检查并发现为FALSE
,因此运行else
语句,将elig_factor[2]
设置为'0'
,尽管之前已将其设置为'1'
所以你有两个选择:
修改您的代码,使其符合您的要求
if (status eq '1' and hudadmin eq '1') then elig_factor[2] = '1';
else if (status eq '1' and hudadmin eq '2') then elig_factor[2] = '1';
else if (status eq '1' and hudadmin eq '3') then elig_factor[2] = '1';
else elig_factor[2] = '0';
这检查是否hudadmin='1'
,如果不是,则检查是否hudadmin='2'
,如果不是,则检查hudadmin='3'
,仅在检查hudadmin
不是'1'
,'2'
或'3'
后,它将设置elig u系数[2]='0'
代码是合理的,但有点过度设计,我将采用以下方法
使用
中的操作符
if (status eq '1' and hudadmin in ('1','2','3')) then elig_factor[2] = '1';
else elig_factor[2] = '0';
这将在一条语句中检查条件,更容易阅读,而且可以说更有效。如果使用布尔结果,这实际上更容易。下面唯一的区别是它返回数值结果-如果必须使用'1'
,则将它们每个放在一个字符中,或者将它们包装在中代码>
if ("&r_start" eq 1) then
do;
elig_factor[1] = ( 2011<=built <= 2014) ;
elig_factor[2] = (status eq '1' and hudadmin in ('1','2','3'));
elig_factor[3] = (np_all gt 0) ;
elig_factor[4] = (np_black gt 0);
elig_factor[5] = (np_age65 gt 0);
elig_factor[6] = (np_hisp gt 0);
elig_factor[7] = occ;
elig_factor[8] = vac;
end;
如果(“&r_start”等式1),则
做
elig_因子[1]=(2011谢谢你是对的,现在它起作用了。非常感谢。
if ("&r_start" eq 1) then
do;
elig_factor[1] = ( 2011<=built <= 2014) ;
elig_factor[2] = (status eq '1' and hudadmin in ('1','2','3'));
elig_factor[3] = (np_all gt 0) ;
elig_factor[4] = (np_black gt 0);
elig_factor[5] = (np_age65 gt 0);
elig_factor[6] = (np_hisp gt 0);
elig_factor[7] = occ;
elig_factor[8] = vac;
end;