楼主: lihuixin
4355 6

如何使用SAS的宏来简化一个重复操作? [推广有奖]

  • 0关注
  • 0粉丝

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
625 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
671 点
帖子
69
精华
0
在线时间
35 小时
注册时间
2008-12-9
最后登录
2013-3-6

10论坛币
我有若干个文件夹,各个文件夹内的文件个数和名称,以及各个文件内的变量个数和名称完全相同。现在需要将所有文件的变量并列起来,这将涉及到把变量名称与其文件夹和文件名称关联起来。

下面是个简单的例子,包含两个文件夹,两个文件,两个变量。希望大侠能够帮我写一个宏,用于多个文件夹,多个文件,多个变量时。非常感谢。

DATA WORK.ALL;
MERGE
y98.m01(rename=(sale=sale_98_01 profit=profit_98_01))
y98.m02(rename=(ssale=sale_98_02 profit=profit_98_02))

y99.m01(rename=(sale=sale_99_01 profit=profit_99_01))
y99.m02(rename=(sale=sale_99_02 profit=profit_99_02))
;
RUN;

说简单一点,我要把各个文件中的变量并列起来,并且通过重新命名变量名称得以保留所有内容信息。本人感谢任何能将上面的问题使用SAS的宏哪怕只是进行一定程度的化简。



最佳答案

Imasasor 查看完整内容

忘了你文件夹中有多个文件,多个文件可以用上述代码
关键词:sas的 如何使用 Profit rename Merge 文件夹 profit 如何
沙发
Imasasor 发表于 2012-7-15 13:23:24 |只看作者 |坛友微信交流群
  1. /*循环8次*/
  2. /*假设你有8个文件夹,每个文件夹中有2个文件,文件名是m01,m02*/
  3. %macro hebing;
  4. %do i=1 %to 8;
  5. %do j=1 %to 2;
  6. &&lib&i...m0&j(rename=(sale=sale_&&lib&i.._0&j profit=profit_&&lib&i.._0&j))
  7. %end;
  8. %end;
  9. %mend;

  10. data all;
  11. merge
  12. %hebing
  13. ;
  14. run;
复制代码
忘了你文件夹中有多个文件,多个文件可以用上述代码
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

藤椅
Imasasor 发表于 2012-7-15 14:14:52 |只看作者 |坛友微信交流群
你的文件夹名字有规律吗?你说的文件夹是sas的library吗?还是windows里的文件夹,你已经将全部文件导入sas生成数据集了吗?
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

板凳
pobel 在职认证  发表于 2012-7-15 14:25:07 |只看作者 |坛友微信交流群
%let workpath=%sysfunc(pathname(work));

libname y01 "&workpath";
libname y02 "&workpath";
libname y03 "&workpath";


data y01.m01;
   x=1;y=2;        output;
   stop;
run;

data  y02.m02;
   x=3;y=4;
run;

data y03.m03 ;
   x=5; y=6;
run;

proc sql;
    create table vars as
         select distinct libname,memname,name
           from dictionary.columns
           where upcase(libname) eqt "Y" and upcase(memname) eqt "M"
           order by  libname,memname,name;
quit;
          

data tmp;
   set vars end=last;
   by libname memname;
   length merge_code $2000 rename_var $100;
   retain merge_code;
   rename_var=cats(name,"=",name,"_",libname,"_",memname);

   if first.memname then merge_code=strip(merge_code)||" "||strip(libname)||"."||strip(memname)||"(rename=("||strip(rename_var);
   else if not last.memname then merge_code=strip(merge_code)||" "||strip(rename_var);
   else if last.memname then merge_code=strip(merge_code)||" "||strip(rename_var)||")) ";

   if last then call symputx("merge_code",merge_code);

   keep libname memname name rename_var merge_code;
run;


%put &merge_code;

data wanted;
    merge &merge_code;
run;
和谐拯救危机

使用道具

报纸
Imasasor 发表于 2012-7-15 14:40:56 |只看作者 |坛友微信交流群
  1. proc sql;
  2. create table a as
  3. select distinct libname  from dictionary.columns;
  4. quit;

  5. /*打开sas,删除不属于你要合并的逻辑库的名字*/
  6. data a;
  7. set a;
  8. if libname in ("SASUSER","SASHELP","MAPS") then delete;
  9. run;

  10. /*假设删除后,你有8个文件夹*/
  11. proc sql;
  12. select libname into:lib1-:lib8 from a;
  13. quit;

  14. %macro hebing;
  15. %do i=1 %to 8;
  16. &&lib&i...m01(rename=(sale=sale_&i._01 profit=profit_&i._01))  &&lib&i...m02(rename=(sale=sale_&i._02 profit=profit_&i._02))
  17. %end;
  18. %mend;

  19. data all;
  20. merge
  21. %hebing
  22. ;
  23. run;
复制代码
欢迎加入我群,一起讨论
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

地板
Imasasor 发表于 2012-7-15 14:48:45 |只看作者 |坛友微信交流群
  1. proc sql;
  2. create table a as
  3. select distinct libname  from dictionary.columns;
  4. quit;

  5. /*打开work.a,删除不属于你要合并的逻辑库的名字,下例中,只删除了sas系统里的文件夹,若有其它自己建的,自行添加删除*/
  6. data a;
  7. set a;
  8. if libname in ("SASUSER","SASHELP","MAPS") then delete;
  9. run;

  10. /*假设删除后,你有8个文件夹,若是其它数目,将下例中的8改写即可*/
  11. proc sql;
  12. select libname into:lib1-:lib8 from a;
  13. quit;

  14. /*循环8次*/
  15. %macro hebing;
  16. %do i=1 %to 8;
  17. &&lib&i...m01(rename=(sale=sale_&&lib&i.._01 profit=profit_&&lib&i.._01))  &&lib&i...m02(rename=(sale=sale_&&lib&i.._02 profit=profit_&&lib&i.._02))
  18. %end;
  19. %mend;

  20. data all;
  21. merge
  22. %hebing
  23. ;
  24. run;
复制代码
请使用这个代码,给我论坛币,我的比上面一位的好懂

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

7
gds_1234 发表于 2012-7-15 15:40:30 |只看作者 |坛友微信交流群
学习了

使用道具

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

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

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

GMT+8, 2024-5-1 19:32