跨SAS中的变量的递归命令

时间:2013-05-17 18:31:49

标签: sas

如何在不重写条件的情况下将if语句应用于大量变量。例如,假设我有一组变量sex,age,height ...(约60个变量),我想指定条件

如果性别=。然后性别= -99; 如果年龄=。然后年龄= -99; 。 。 。 数据集中存在的所有60个变量。有快速的方法吗?

谢谢

3 个答案:

答案 0 :(得分:2)

使用数组。

array arr{60} sex age height .... ;

do i = 1 to 60;
  if arr{i} = . then arr{i} = -99;
end;

那就是说,要考虑重新编码这样的缺失值是否真的是你想要做的。大多数SAS程序都知道缺失值并能以合理的方式处理它们;将它们变成数值可能会让你陷入困境。例如,如果您尝试使用PROC SUMMARY计算总和或平均值,则结果将不再有意义;同样,如果您尝试使用统计程序分析数据。

答案 1 :(得分:1)

除了Hongi Ooi的答案之外,如果你想对数据集中的所有变量(听起来像你这样做)做这个并且不想输出它们,你可以让SAS为你提供包含要添加到数组中的变量列表。

示例:

%macro getvars(dsn);
%global vlist;
proc sql;
    select name into :vlist separated by ' '
    from dictionary.columns
    where memname=upcase("&dsn");
quit;
%mend;

以下是此示例和其他示例的参考:How to read variable names in a SAS data set?

此外,如果您希望这也适用于字符串变量,您可能需要考虑使用缺少的函数。

E.G。如果缺少(var)则执行;

答案 2 :(得分:0)

data have;
input x y z a b;
datalines;
1 2 3 . 5
4 5 . 1 2
4 3 . . 1
;;;;
run;

proc stdize data=have out=want reponly missing=-99; 
run;

如果你真的想要做所有这些(或列出你想做的那些)。 STDIZE是SAS / STAT的一部分,所以希望你能拥有它。