全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7173 1
2013-07-01
悬赏 40 个论坛币 未解决
      写了 一段代码如下     ,我具体想干的就是先按条件生成一个大表   mo.Y_&ID ,然后再把这个表按条件拆开分别导出(这一步我想用宏内的循环来实现),现在想用宏一次实现完成这两步骤。但是,到了里面部分大表 mo.Y_&ID 生完后按条件分拆 ,编写宏循环的时候遇到困难过不去,求高手指点!!!    下面是我写的,高手可以直接修改。                                      

%macro  out(type=)
...............
data   mo.Y_&ID ;
set  XXXXX;
..........
run;
/*然后把mo.Y_&ID按条件拆开分别导出,这里我只举了三个作为例子*/
data   
mo.X1_F18_25                              
mo.X2_F25_30                                 
mo.X3_F30_35       ;                                                
set  mo.Y_&ID ;      
if  GNDAGE  = "F/18<= <25" then output mo.X1_F18_25 ;        
else if  GNDAGE  = "F/25<= <30" then output  mo.X2_F25_30 ;                             
else if  GNDAGE  = "F/30<= <35" then output  mo.X3_F30_35 ;      run;                                                                                                                                                                     
/*这里我想用一个宏循环逐个导出,但是不知道怎么写,下面是我瞎写的,请大侠看懂我意思修改*/
%let var1 = %X1_F18_25;
%let var2 = %X2_F25_30 ;
%let var3 = %X3_F30_35   ;
  %do i = 1 %to 3;
                 
PROC EXPORT DATA= mo.&varI                                                                                                      
            OUTFILE= "D:\kk\&varI.csv"                                                                                                                           
            DBMS=CSV REPLACE;                                                                                                           
RUN;
%end;

%mend;

%Out(type=XXX);
run;


求高手帮忙出主意!
二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-2 01:03:30
/* try this */

data xxx;
input GNDAGE $10.;
datalines;
F/18<= <25
F/25<= <30
F/30<= <35
; run;
%let ID=01;

%macro  out(type=);
data work.Y_&ID ;
   set  &type;
run;

data work.X1_F18_25
     work.X2_F25_30
     work.X3_F30_35;
set  work.Y_&ID;
        if  GNDAGE  = "F/18<= <25" then output work.X1_F18_25;
   else if  GNDAGE  = "F/25<= <30" then output work.X2_F25_30;
   else if  GNDAGE  = "F/30<= <35" then output work.X3_F30_35;
run;

%let var1 = X1_F18_25;
%let var2 = X2_F25_30;
%let var3 = X3_F30_35;

  %do i = 1 %to 3;
     PROC EXPORT DATA= work.&&var&I
      OUTFILE= "D:\kk\&&var&I...csv"
      DBMS=CSV REPLACE;
      RUN;
  %end;
%mend out;

%Out(type=XXX);
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群