楼主: yellowriver
2469 4

[原创博文] 如何写这段简单的sas macro呢?谢谢 [推广有奖]

  • 0关注
  • 4粉丝

VIP

博士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
10028 个
通用积分
22.7632
学术水平
21 点
热心指数
26 点
信用等级
19 点
经验
3133 点
帖子
164
精华
0
在线时间
170 小时
注册时间
2007-11-4
最后登录
2019-5-18

50论坛币
求教一段很基本的sas macro! 非常感谢!

我有三个sas file: background, lab_bp, drug都存在我以下路径里, 同一个文件夹下里还有lab_xt, lab_sp, lab_hbp共10个和lab_bp一样结构的数据集,要求写一段macro来替换以下所有含lab_bp的变量(把lab_bp改为lab_xt, lab_hbp等等),由于需要merge,所以lab_bp变为其他lab_*的话会产生新的一个数据集new1,new2, new3...而后面所有分析都是针对新merge而成的数据集new i 来做的。总之我的macro变量有两个,一个是lab_*, 另一个是新数据集new&i (由lab_*和其它两个不变的数据集生成的).

我用lab_bp写的code如下,如何把这个作用于同一个文件夹下其他lab_*?希望大家帮我在我的code上加入macro,谢谢!.
  1. LIBNAME TEST "C:\DOCUMENT\DATA\";
  2. data new_background;
  3. set TEST.background;
  4. run;

  5. data new_lab_bp;
  6. set TEST.lab_bp;
  7. run;

  8. data new_drug;
  9. set TEST.drug;
  10. run;

  11. proc sort data=new_background;
  12. by id;
  13. run;

  14. proc sort data=new_lab_bp;
  15. by id;
  16. run;

  17. proc sort data=new_drug;
  18. by id;
  19. run;

  20. data new1;
  21. merge new_background
  22.           new_lab_bp
  23.           new_drug;
  24. by id;

  25. proc print data=new1 (firstobs=1 obs=10) noobs;
  26. run;

  27. proc univariate data=new1;
  28. var age;
  29. run;

  30. /*以下还有好多proc都是针对数据new1,最后会永久保存一下new1*/

  31. data TRY.new1;
  32. set new1;
  33. run;

  34. /*结束*/
复制代码

关键词:Macro acr CRO Mac 如何写 background 文件夹 如何 file

回帖推荐

hopewell 发表于4楼  查看完整内容

本帖被以下文库推荐

沙发
yellowriver 发表于 2011-1-28 18:54:20 |只看作者 |坛友微信交流群
大家来帮帮我吧?

1# yellowriver

使用道具

藤椅
baoaibaobao 发表于 2011-1-28 19:19:09 |只看作者 |坛友微信交流群
  1. LIBNAME TEST "C:\DOCUMENT\DATA\";
  2. %macro lab(n);
  3. %let lab_1=lab_bp;
  4. %let lab_2=lab_xt;
  5. %let lab_3=lab_sp;
  6. %do i=1 %to &n.;
  7.         proc sort data=TEST.background;
  8.                 by id;
  9.         run;
  10.         proc sort data=TEST.&&lab_&i.;
  11.                 by id;
  12.         run;
  13.         proc sort data=TEST.drug;
  14.                 by id;
  15.         run;
  16.         data new&i.;
  17.                 merge TEST.background TEST.&&lab_&i. TEST.drug;
  18.         by id;
  19.         proc print data=new&i. (firstobs=1 obs=10) noobs;
  20.         run;
  21.         proc univariate data=new&i.;
  22.                 var age;
  23.         run;
  24. %end;
  25. %mend;
  26. %lab(3);
复制代码

使用道具

板凳
hopewell 发表于 2011-1-28 20:12:51 |只看作者 |坛友微信交流群
  1. /*DEMO DATA*/
  2. /*data ben.background;*/
  3. /*    input id background;*/
  4. /*datalines;*/
  5. /*1 11*/
  6. /*2 12*/
  7. /*;*/
  8. /*data ben.drug;*/
  9. /*    input id drug;*/
  10. /*datalines;*/
  11. /*1 21*/
  12. /*2 22*/
  13. /*;*/
  14. /*data ben.lab_a;*/
  15. /*    input id lab_a;*/
  16. /*datalines;*/
  17. /*1 31*/
  18. /*2 32*/
  19. /*;*/
  20. /*data ben.lab_b;*/
  21. /*    input id lab_b;*/
  22. /*datalines;*/
  23. /*1 41*/
  24. /*2 42*/
  25. /*;*/

  26. options nomprint nosymbolgen nomlogic mcompilenote=all;
  27. %macro Benhope(libref_in=, ds_prefix=lab_, libref_out=TRY);
  28.     %local err;
  29.     %let err=0;
  30.     %let libref_in=%upcase(&libref_in);
  31.     %let libref_out=%upcase(&libref_out);
  32.     %let ds_prefix=%upcase(&ds_prefix);
  33.     %if &err eq 0 %then %do;
  34.         %if %sysfunc(libref(&libref_in)) %then %do;
  35.             %let err=1;
  36.             %put %sysfunc(sysmsg());
  37.         %end;
  38.         %if %sysfunc(libref(&libref_out)) %then %do;
  39.             %let err=1;
  40.             %put %sysfunc(sysmsg());
  41.         %end;
  42.     %end;
  43.     %if &err eq 0 %then %do;
  44.         %if %sysfunc(exist(&libref_in..background)) ne 1 %then %do;
  45.             %let err=1;
  46.             %put WARNING: *** Dataset(&libref_in..BACKGROUND) Not Exist! ***;
  47.         %end;
  48.         %if %sysfunc(exist(&libref_in..drug)) ne 1 %then %do;
  49.             %let err=1;
  50.             %put WARNING: *** Dataset(&libref_in..DRUG) Not Exist! ***;
  51.         %end;
  52.     %end;
  53.     %if &err eq 0 %then %do;
  54.         proc sql;
  55.             create table _temp as
  56.                 select memname as dsname
  57.                     from sashelp.vtable
  58.                     where libname="&libref_in" and memname like "&ds_prefix%" and memtype='DATA' ;
  59.         quit;
  60.         %let dsid=%sysfunc(open(work._temp));
  61.         %let num=%sysfunc(attrn(&dsid, nlobs));
  62.         %if &num gt 0 %then %do;
  63.             proc sort data=&libref_in..background out=new_background;
  64.                 by id;
  65.             run;
  66.             proc sort data=&libref_in..drug out=new_drug;
  67.                 by id;
  68.             run;
  69.             %syscall set(dsid);
  70.             %do i=1 %to #
  71.                 %let rc=%sysfunc(fetchobs(&dsid, &i));
  72.                 proc sort data=&libref_in..&dsname out=&libref_out..new_&dsname;
  73.                     by id;
  74.                 run;
  75.                 data &libref_out..new_&dsname;
  76.                     merge new_background
  77.                           &libref_out..new_&dsname
  78.                           new_drug;
  79.                     by id;
  80.                 run;
  81.                 %put ERROR-*** Proc Univariate(dsname=%trim(&dsname)) Execute! ***;
  82. /*                proc univariate data=&libref_out..new_&dsname;*/
  83. /*                    var age;*/
  84. /*                run;*/
  85.             %end;
  86.         %end;
  87.         %else %put WARNING: *** Dataset(&ds_prefix..*) Not Find! ***;
  88.         %if &dsid gt 0 %then %let rc=%sysfunc(close(&dsid));
  89.         proc datasets library=work nolist;
  90.             delete _temp
  91.                    new_background
  92.                    new_drug;
  93.         quit;
  94.     %end;
  95. %mend;

  96. libname ben 'C:\Ben Xu\00 Test_Temp';
  97. %benhope(libref_in=ben,libref_out=ben)
复制代码
观钓颇逾垂钓趣 种花何问看花谁

使用道具

报纸
myzhang1982 在职认证  发表于 2011-1-30 11:32:50 |只看作者 |坛友微信交流群
正在学习中~~~~~~~~~~

使用道具

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

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

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

GMT+8, 2024-4-30 19:05