我需要分解這個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;'和更多的調試信息,你可以打開'選項mlogic symbolgen macrogen;'。這可能會幫助你瞭解正在發生的事情。 –
@Joe,這裏有什麼合適的協議,如果我沒有回答這個問題,現在就刪除我的答案? – Reeza