Sas 刷新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

是否有命令或快捷方式将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;
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—我发现自己使用您的解决方案的频率比调用缺失例程的频率更高—因为您的代码可以快速修改,将所有“缺失”变量变为零。