Вопрос
Есть ли команда или быстрый способ установить отсутствие всех существующих переменных в PDV?
У меня есть код, который работает следующим образом:
Data example2;
var1='A';
Var2='B';
Var3='C';
/* etc*/
output;
Var1='B';
output;
stop;
run;
как только будет достигнут первый оператор вывода, я хотел бы сбросить все переменные PDV до отсутствующих (например, var2='';var3='';), но без необходимости объявлять их как таковые вручную.Кто-нибудь может помочь?
Решение
Процедура пропущенного вызова и _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
Другие советы
Вы можете сделать это с помощью массивов.
Вот макрос, который делает все, что есть в 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