如果/然后/否则SAS不工作

时间:2014-05-01 16:32:25

标签: if-statement sas

努力获得此If / Then / Else语句不起作用。我有两列:变量和值。变量具有变量的名称,而Value具有可与该变量关联的所有潜在代码。

示例:

Variable     Value
Gender         F
Gender         M

我想创建一个名为“Flag”的字段,如果该值不在值列表中,则应标记该字段;否则,将该字段留空

data Want;
length 
Variable $40.
Value $40.
Flag $8.;
set Have (keep = Variable Value);
if (Variable = 'Gender' and Value ^= 'M') then Flag = 'UnkCode'; else Flag="";
if (Variable = 'Gender' and Value ^= 'F') then Flag = 'UnkCode'; else  Flag="";
if (Variable = 'Gender' and Value ^= 'O') then Flag = 'UnkCode'; else Flag="";
if (Variable = 'Gender' and Value ^= 'U') then Flag = 'UnkCode'; else Flag="";
run;
quit;

我正在使用的数据集只有两个为Gender的值:F和M.无论出于何种原因,两行中的flag字段都有“UnkCode”

知道我做错了什么吗?

2 个答案:

答案 0 :(得分:4)

可能更清楚一点:if语句按顺序进行评估。

因此,对于您的第一次观察,Flag最初将设置为"",(' M' =' M')。但是,Flag会被后续的if语句覆盖,而且(' M' ^ =' F'),Flag会被覆盖,并取值' UnkCode&#39 ;

除了Keni使用in语句(这比我将建议的代码更好)之外,您还可以执行以下操作(这可以帮助您更好地理解if语句)。

if (Variable = 'Gender' and Value = 'M') then Flag = "";
else if (Variable = 'Gender' and Value = 'F') then Flag = "";
else if (variable = 'Gender' and Value = 'O') then Flag = "";
else if (Variable = 'Gender' and Value = 'U') then Flag = "";
else if (Variable = 'Gender') then Flag = 'UnkCode';

我可能还建议,不要使用名为'变量'的变量,而值为'性别',您只需要一个名为' Gender'的变量。价值为' F'或者' M'。虽然在某些特定情况下您不希望以这种方式创建数据集,但它们相对较少且相差甚远。

答案 1 :(得分:3)

我将所有IF条件放在一个语句中并且有效。

data Want;
      length Variable $40. Value $40. Flag $8.;
      set Have (keep = Variable Value);
      If (Variable = 'Gender' and Value in ('F','M','O','U')) then Flag =" "; 
         else Flag = 'UnkCode'; 
run;
quit;

要为多个变量标记...这应该有用。

data Want;
    length Variable $40. Value $40. Flag $8.;
    set Have (keep = Variable Value);
    Flag = 'UnkCode';
    if (Variable = 'Gender' and Value in ('F','M','O','U')) then Flag =" "; 
    else if (Variable = 'Race' and Value in ('B','A')) then Flag =" ";  
run;
quit;