Промывка переменных PDV - PullRequest
2 голосов
/ 09 июня 2009

Есть ли команда или быстрый способ установить все существующие переменные в PDV на отсутствующие?

У меня есть код, который работает так:

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

как только будет достигнут первый оператор 'output', я бы хотел сбросить все переменные PDV на пропущенные (например, var2 = ''; var3 = '';), но без необходимости объявлять их как таковые вручную. Кто-нибудь может помочь?

Ответы [ 2 ]

7 голосов
/ 10 июня 2009

Процедура пропуска вызовов и автоматический список переменных _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 голос
/ 10 июня 2009

Вы можете сделать это с массивами.

Вот макрос, который пропускает все в 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
...