/*
*++
* データセット(dsn)の変数(keep)をリストにして、マクロ変数(macvar)にセット
*--
*/
%macro varlist(dsn=, keep=, macvar=);
%global &macvar;
%local i dsid n type rc;
%let i=;
%let dsid=%sysfunc(open(&dsn,i));
%let n=%sysfunc(varnum(&dsid,&keep));
%let type=%sysfunc(vartype(&dsid,&n));
%let rc=%sysfunc(close(&dsid));
%let &macvar=;
%if &type=C %then
%do;
/* 変数が文字型 */
data _null_;
set &dsn(keep=&keep) end=eod;
length list $1024;
retain list;
if _n_ eq 1 then
do;
list = '"' || compress(&keep) || '"';
end;
else
do;
list = trim(list) || ',"' || compress(&keep) || '"';
end;
if eod eq 1 then
do;
call symput("&macvar", compress(list));
end;
run;
%end;
%else
%do;
/* 変数が数値型 */
data _null_;
set &dsn(keep=&keep) end=eod;
length list $1024;
retain list;
if _n_ eq 1 then
do;
list = put(&keep, best.);
end;
else
do;
list = trim(list) || ',' || put(&keep, best.);
end;
if eod eq 1 then
do;
call symput("&macvar", compress(list));
end;
run;
%end;
%mend;
%varlist(dsn=sashelp.class, keep=name, macvar=test);
%put test=&test;
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2014年3月1日土曜日
マクロ %varlist
変数の値をカンマでつないだリストを作りマクロ変数にセットします。よく使う割りに忘れます。変数が数値でも文字型でも動くように修正しました。
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿