0

如何将 if 语句应用于大量变量而无需重写条件。例如,假设我有一组变量性别、年龄、身高……(大约 60 个变量)并且我想指定条件

如果性 = 。然后性别 = -99; 如果年龄 = . 然后年龄 = -99;. . . 数据集中存在的所有 60 个变量。有没有快速的方法来做到这一点?

谢谢

4

3 回答 3

2

使用数组。

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

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

也就是说,请考虑重新编码这样的缺失值是否真的是您想要做的。大多数 SAS 程序都知道缺失值,并且可以以合理的方式处理它们;把它们变成一个数值可能会在后面咬你。例如,如果您尝试使用 PROC Summary 计算总和或均值,您的结果将不再有意义;同样,如果您尝试使用统计程序分析数据。

于 2013-05-17T18:42:33.583 回答
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;

这是此示例和其他示例的参考:如何读取 SAS 数据集中的变量名称?

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

EG 如果缺少(var)然后做;

于 2013-05-17T19:16:52.217 回答
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 的一部分,所以希望你拥有它。

于 2013-05-17T19:30:50.577 回答