楼主: nkwilling
1947 1

[原创博文] 如何用宏更改逻辑库下面所有SAS数据集名? [推广有奖]

  • 0关注
  • 65粉丝

副教授

23%

还不是VIP/贵宾

-

威望
1
论坛币
3349 个
通用积分
0.0001
学术水平
109 点
热心指数
93 点
信用等级
47 点
经验
10032 点
帖子
322
精华
0
在线时间
596 小时
注册时间
2008-1-9
最后登录
2013-9-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有兴趣的请笑纳。特别是做ETL的朋友。

LIBNAME TEST "D:\TESTDATA";

%LET RPT=RPT_TEMP;

proc sql;
    create table test.change as
    select
    memname
    from dictionary.tables
    where libname eq "TEST";
quit;

%MACRO CHANGE();
    %LET DSID=%SYSFUNC(OPEN(test.change));
    %IF &DSID GT 0 %THEN %DO;
    %LET NOBS=%SYSFUNC(ATTRN(&DSID,NOBS));
    %DO I=1 %TO &NOBS;
        %LET RC=%SYSFUNC(FETCHOBS(&DSID,&I));
        %LET VARNUME=%SYSFUNC(VARNUM(&DSID,MEMNAME));
        %LET TABLE=%SYSFUNC(GETVARC(&DSID,&VARNUME));
        PROC DATASETS LIB=TEST;
        CHANGE &TABLE=&RPT._T&I.;
        QUIT;
    %END;
    %LET DSID=%SYSFUNC(CLOSE(&DSID));
   %END;
%MEND CHANGE;

%CHANGE;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:sas数据集 如何用 逻辑库 数据集 Dictionary

本帖被以下文库推荐

沙发
bobguy 发表于 2009-12-3 12:28:16 |只看作者 |坛友微信交流群
nkwilling 发表于 2009-12-2 09:21
有兴趣的请笑纳。特别是做ETL的朋友。

LIBNAME TEST "D:\TESTDATA";

%LET RPT=RPT_TEMP;

proc sql;
    create table test.change as
    select
    memname
    from dictionary.tables
    where libname eq "TEST";
quit;

%MACRO CHANGE();
    %LET DSID=%SYSFUNC(OPEN(test.change));
    %IF &DSID GT 0 %THEN %DO;
    %LET NOBS=%SYSFUNC(ATTRN(&DSID,NOBS));
    %DO I=1 %TO &NOBS;
        %LET RC=%SYSFUNC(FETCHOBS(&DSID,&I));
        %LET VARNUME=%SYSFUNC(VARNUM(&DSID,MEMNAME));
        %LET TABLE=%SYSFUNC(GETVARC(&DSID,&VARNUME));
        PROC DATASETS LIB=TEST;
        CHANGE &TABLE=&RPT._T&I.;
        QUIT;
    %END;
    %LET DSID=%SYSFUNC(CLOSE(&DSID));
   %END;
%MEND CHANGE;

%CHANGE;
Here are general comments to who would like to learn SAS and SAS macro.

It is always good idea to avoid macro if there are other simple ways. Good macro programming needs a lot good think , such as , dynamic, robust, and efficent. After all SAS macro is simply a text generator. The necessary condistion for a good macro programmer is a good SAS(DATA STEP/SQL) BASE programmer. To learn how to walk is before how to run.

This will be much simpler and more readable.

data t1 t2 t3;
  do i = 1 to 1e1;
  end;
run;

%LET RPT=RPT_TEMP;

proc sql noprint;
    select cats(memname,"=&RPT._",memname) into: rdsnlist separated by ' '
    from dictionary.tables
    where libname eq "WORK";
quit;

PROC DATASETS LIB=work;
        CHANGE &rdsnlist
        ;
RUN;
QUIT;

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 02:49