Мне нужно разбить этот макрос SAS, который добавляет суффиксы к некоторому числу переменных в псевдокод, но есть некоторые его части, которые я не совсем понимаю.Ломать макрос SAS в псевдокоде
%macro add_suffix(lib,dsn, suffix);
options pageno=1 nodate;
OPTIONS OBS= 1;
DATA GRIDWORK.TMP;
SET &lib..&dsn.;
RUN;
proc sql noprint;
select nvar into :num_vars
from dictionary.tables
where libname="GRIDWORK" and
memname="TMP";
select distinct(name) into :var1-
:var%TRIM(%LEFT(&num_vars))
from dictionary.columns
where libname="GRIDWORK" and
memname="TMP";
quit;
run;
OPTIONS OBS= MAX;
proc datasets library=&LIB;
modify &DSN;
rename
%do i=1 %to &num_vars;
&&var&i=&&var&i..&suffix
%end;
;
quit;
run;
proc datasets library=&LIB;
modify &DSN;
rename pers_gen_key&suffix = pers_gen_key;
quit;
run;
proc sql;
drop table gridwork.tmp;
quit;
%mend add_suffix;
1) В этой части кода:
DATA GRIDWORK.TMP;
SET &lib..&dsn.;
RUN;
Как вы настройки набора данных, равный двум значениям? Установляет ли GRIDWORK.TMP конкатенацию & lib и & dsn? Что именно здесь означают несколько периодов?
2) Я понимаю, что этот раздел хранения переменных в массиве:
proc sql noprint;
select nvar into :num_vars
from dictionary.tables
where libname="GRIDWORK" and
memname="TMP";
select distinct(name) into :var1-
:var%TRIM(%LEFT(&num_vars))
from dictionary.columns
where libname="GRIDWORK" and
memname="TMP";
quit;
Как именно dictionary.tables и dictionary.columns работают, и как они отличаются от друг друга в этом контексте? Here - это документация, я прочитал ее, но мне все еще трудно понять, что именно происходит в этом разделе кода.
3) В конце макроса мы имеем:
OPTIONS OBS= MAX;
proc datasets library=&LIB;
modify &DSN;
rename
%do i=1 %to &num_vars;
&&var&i=&&var&i..&suffix
%end;
;
quit;
run;
Here является документация для процедуры Proc наборов данных. Он говорит, что он называет библиотеку, обрабатываемую процедурой. Означает ли это, что & dsn является частью библиотеки библиотеки &? Наверное, я не уверен, как работают библиотеки в SAS. Они встроены или определены пользователем? Почему они необходимы, не могли бы мы просто изменить & DSN самостоятельно?
Это три вопроса в одном - пожалуйста, ограничивайте один вопрос одновременно. Это в значительной степени показывает, что у вас нет базового понимания SAS; ответы на все вышеуказанные вопросы можно получить, потратив несколько дней на чтение документации SAS и/или на базовый класс SAS. – Joe
Также обратите внимание на «option mprint;» и для получения дополнительной информации об отладке вы можете включить «option mlogic symbolgen macrogen;». Это может помочь вам понять, что происходит. –
@Joe, что это за правильный протокол здесь, не должен ли я отвечать на этот вопрос, удалить мой ответ сейчас? – Reeza