Macros 将SAS宏分解为伪代码
我需要将这个为一些变量添加后缀的SAS宏分解为伪代码,但其中有些部分我不完全理解Macros 将SAS宏分解为伪代码,macros,sas,data-processing,Macros,Sas,Data Processing,我需要将这个为一些变量添加后缀的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 f
%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究竟是如何工作的,在这种情况下它们之间有什么区别?是文档,我通读了它,但仍然很难理解代码的这一部分到底发生了什么
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;
是proc数据集程序的文档。它说它命名了程序处理的库。这是否意味着&dsn是&lib库的一部分?我想我不确定SAS中的库是如何工作的。它们是内置的还是用户定义的?为什么它们是必需的,我们不能自己修改&DSN吗
我强烈建议您查看
%put
语句,并将其放在代码的各个部分中,以准确了解代码在做什么 这是一个三个问题-请每次限制一个问题。这在很大程度上表明,您对SAS没有基本的了解;以上所有问题的答案都可以通过花几天时间阅读SAS文档和/或参加基本的SAS课程来获得代码>和更多调试信息,您可以打开选项mlogic symbolgen macrogen代码>。这可能有助于你理解发生了什么。@Joe,这里的正确协议是什么,如果我没有回答这个问题,现在删除我的答案吗?@Reeza在我看来,你不应该回答一个糟糕的问题。但是,这里真的没有硬性规定……:)老实说,可能80-90%的问题都不太合适,我们倾向于比理论上更宽松(如果是这样的话,或者一分钟内就全部结束了)。“为我编写代码”的问题太多了。@Joe对此表示抱歉,我一定会在以后提问之前进行更多研究。