全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4974 7
2010-11-02
悬赏 100 个论坛币 已解决
能否大致解析一下以下的macro代码?代码每隔一小段稍微给一下点评可以吗?感谢大家!

%macro Glue(InputFile=,InputSheet=);
PROC IMPORT OUT= WORK.Master
DATAFILE= "&inputfile."
   
DBMS=EXCEL REPLACE;

   
SHEET="&inputsheet";

   
GETNAMES=YES;

RUN;


Proc Sort data=master;
  
by order;

run;


Data _null_;
set master;
by order;
call symput('Program'||'_'||strip(put(_N_,8.)),Program);
call symput('Type_of_prog'||'_'||strip(put(_N_,8.)),Type);
call symput('Inputlist'||'_'||strip(put(_N_,8.)),InputList);
call symput ('Location'|| '_'||strip(put(_N_, 8.)),Location);
call symput ('number_of_progs',_N_);
run;
    %local a;
    %do a= 1 %to &number_of_progs. ;
        %include "&&Location_&a." ;
        %if %upcase(&&Type_of_prog_&a.) eq MACRO %then %do;
            %let program=&&Program_&a.;
            %let inputlist=(&&Inputlist_&a);
            %str(%&program. &inputlist.);
        %end;
    %end ;
%mend;


给以上程序用的Sample excel sheet:

              
    Order
   
    Type
   
    Program
   
    InputList
   
    Location
   
   

4


   
    Sas
   
    Initial
   
   
   
    C:\Initial.sas
   
   

5


   
    Macro
   
    Conversion
   
    agg_file=&agg_file,    inputds=otela_data
   
    C:\conversion.sas
   
   

6


   
    Sas
   
    Comprehension
   
   
   
    C:\comprehension.sas
   
   

7


   
    Macro
   
    suppressioncounts
   
    Level=district,
LevelVar=g_district_irn

   
    C:\suppressioncounts.sas
   
  
二维码

扫码加我 拉你入群

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

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

全部回复
2010-11-2 00:40:53
复制代码
二维码

扫码加我 拉你入群

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

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

2010-11-2 04:14:52
悬赏金还真不少!我现在可正是愁着帐号里一分全无呢!看上去这个macro程序并不是很难的!不知道如果我解释给你后,你会怎样将那100个论坛币投进我的帐号里?(我注册一个多星期来,回了十几个帖子,得到了59个积分,不知道为什么我现在的帐号里,论坛币还是为零?不是说:10个积分可得一个论坛币,可怎么还看不到我账号有论坛币?不知道版主可不可以关注一下?我的经验积分值要累计到多少才能显示出我有多少论坛币?)
这段Macro我觉得应该还算很容易理解的呀!就是从微软的Excel中从第1行一直读取数据到'number_of_progs',Sample excel sheet中有5个纵列(Order ,Type ,Program, InputList, Location),分别读到SAS中的四个变量(Type_of_prog,Program, InputList, Location)然后写到一个叫Master的SAS文件中,在macro程序中用四句call symput只读取(Type ,Program, InputList, Location,第五句call symput是从SAS的_N_中读取SAS运行时的循环数作为样本的总例数,在这个例子中,一共有5行,因为在proc import中有getnames=yes,SAS会自动将excel表格里的标题读进SAS的文件中),再重新按Order排序!在call 这个%Glue macro时,要给出两个东西:第一,就是要给出Sample excel sheet的地址和文件名,第二,就是要给出Sample excel sheet表格内sheet的名称,一般第一张表就叫Sheet1):
%Glue(C:\data\Excel_sheet.xls,Sheet1);
不知道楼主还有什么不明白,需要更详细解释的呢?
二维码

扫码加我 拉你入群

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

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

2010-11-2 09:17:52
楼上你的答案是最佳的话,钱就直接打你帐户里了,方便快捷,没有延迟,不收手续费
经验貌似是要换成金币的,而且会有一定的条件

楼上还要补充解释下%local a下面的语句,下面还是有点功能的......
二维码

扫码加我 拉你入群

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

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

2010-11-2 10:15:56
改写了一下
复制代码
二维码

扫码加我 拉你入群

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

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

2010-11-2 13:34:29
你好!感谢你的回复,因为你楼下答得确实很好,按照版规,我得投给“最佳答案”,谢谢你!


3# 情迷仲夏夜
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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