刷新PDV变量

时间:2009-06-09 15:10:31

标签: sas datastep

是否有命令或快速方法将PDV中的所有现有变量设置为丢失?

我有一些代码运行如下:

Data example2; 
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
Var1='B';
output;
stop;
run;

一旦达到第一个'输出'语句,我想将所有PDV变量重置为缺失(例如var2 =''; var3 ='';),但不必手动声明它们。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:7)

呼叫缺失例程和_all_自动变量列表可以轻松完成

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

答案 1 :(得分:1)

您可以使用数组来完成。

这是一个让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;
%cleanpdv(1);
Var1='B';
output;
%cleanpdv(2);
output;
stop;
run;

生成以下数据集:

  Obs    var1    Var2    Var3

   1      A       B       C
   2      B
   3