Чтобы «скопировать» структуру PDV набора данных, рекомендуется "ссылаться набор данных во время компиляции», используя
if 0 then set <data-set>
Например,
data toBeCopied;
length var1 $ 4. var2 $ 4. ;
input var1 $ var2 $;
datalines;
this is
just some
fake data
;
run;
data copyPDV;
if 0 then set toBeCopied;
do var1 = 'cutoff' ;
do var2 = 'words';
output;
end;
end;
run;
Однако при выполнении этого в журнале появляется следующее ПРИМЕЧАНИЕ:
ПРИМЕЧАНИЕ. ШАГ ДАННЫХ остановлен из-за зацикливания.
Это связано с тем, что шаг данных никогда не достигает маркера EOF и застревает в бесконечном цикле, как описано в Зацикливание набора данных. (Оказывается, шаг ДАННЫЕ распознает это и завершает цикл, следовательно, ПРИМЕЧАНИЕ в журнале).
Похоже, что использование оператора if 0 then set <data-set>
является давней практикой, восходящей к 1987 году. Хотя мне это кажется хакерским, я не могу придумать другого способа получить тот же результат (т.е. скопировать структуру PDV), кроме ручного повторная формулировка требований к атрибутам. Мне также кажется плохой формой позволять ОШИБКАМ, ПРЕДУПРЕЖДЕНИЯМ и ПРИМЕЧАНИЯМ, которые подразумевают непреднамеренное поведение программы, оставаться в журнале.
Есть ли способ подавить это примечание или вообще лучший метод для достижения того же результата (т. е. копирования структуры PDV набора данных)?
Если вы включите оператор stop;
, как в
if 0 then do;
set toBeCopied;
stop;
end;
ПРИМЕЧАНИЕ все еще сохраняется.
Попытка ограничить SET
одним наблюдением также не дает результата:
if 0 then set toBeCopied (obs=1);
if 0
? Это может быть частью вашей проблемы здесь. - person Joe   schedule 21.09.2016data copyPDV_v2; if 0 then set toBeCopied; input var1 $ var2 $; datalines; cutoff words cutoff words ; run;
, я больше не получаю ошибку, но это, похоже, противоречит цели использованияif 0 then set
(чтобы избежать ручного копирования переменных/атрибутов) - person Lorem Ipsum   schedule 21.09.2016