Sas 刷新PDV变量
是否有命令或快捷方式将PDV中的所有现有变量设置为缺失 我有一些运行如下的代码:Sas 刷新PDV变量,sas,datastep,Sas,Datastep,是否有命令或快捷方式将PDV中的所有现有变量设置为缺失 我有一些运行如下的代码: Data example2; var1='A'; Var2='B'; Var3='C'; /* etc*/ output; Var1='B'; output; stop; run; Data example2; var1='A'; Var2='B'; Var3='C'; /* etc*/ output; %cleanpdv(1); Var1='B'; output; %cleanpdv(2); output
Data example2;
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
Var1='B';
output;
stop;
run;
Data example2;
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
%cleanpdv(1);
Var1='B';
output;
%cleanpdv(2);
output;
stop;
run;
一旦到达第一个“output”语句,我想将所有PDV变量重置为missing(例如var2='';var3=''),但不必手动声明它们。有人能帮忙吗?你可以用数组 这是一个使PDV中的所有内容都丢失的宏。参数
t
允许您从单个数据步骤多次调用它
%macro cleanpdv(t);
array __c&t{*} _character_;
array __n&t{*} _numeric_;
do __i&t=1 to dim(__c&t);
call missing(__c&t{__i&t});
end;
do __i&t=1 to dim(__n&t);
call missing(__n&t{__i&t});
end;
drop __i&t;
%mend;
您可以这样使用它:
Data example2;
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
Var1='B';
output;
stop;
run;
Data example2;
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
%cleanpdv(1);
Var1='B';
output;
%cleanpdv(2);
output;
stop;
run;
将生成以下数据集:
Obs var1 Var2 Var3
1 A B C
2 B
3
Obs var1 Var2 Var3
1 A B C
2 B
3.
调用丢失例程和
\u所有
自动变量列表将轻松完成此操作
call missing(of _all_);
比如说
Data example2;
var1='A';
Var2='B';
Var3='C';
output;
call missing(of _all_);
Var1='B';
output;
stop;
run;
proc print data=example2;
run;
产生
The SAS System
Obs var1 Var2 Var3
1 A B C
2 B
你有没有可能把它分成两个数据步骤?我可以,但我更愿意把它作为一个步骤…我认为call missing会很有用…不知道all关键字…还有字符和数字自动变量列表(就像simonn在回答中使用的)如果只想分别更改字符变量或数字变量。非常方便!这里有一个参考:这比我的解决方案好得多!我不知道你可以像那样传递多个变量来调用missing()。谢谢实际上,simonn—我发现自己使用您的解决方案的频率比调用缺失例程的频率更高—因为您的代码可以快速修改,将所有“缺失”变量变为零。