全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6565 5
2010-02-16
数据集te.file_list里有4条记录,想以这4条记录作分析对象测试。
写了下面的代码
data temp;                                                                                                                              
set te.file_list;                                                                                                                       
CALL SYMPUT("name", sc);                                                                                                               
%let date="2002-03-01";                                                                                                                 
%out;                                                                                                                                   
                                                                                                                                        run;  
运行结果是只有最后一条记录调用了宏。

而这段代码
data temp;                                                                                                                              
set te.file_list;                                                                                                                       
call execute('CALL SYMPUT("name", sc);                                                                                                                
%let date="2002-03-01";                                                                                                                 
%out;
');
                                                                                                                                        run;  
则显示程序确实调用了4次宏,但每次仍然是最后一条记录数据的sc字段进入了宏变量name。
不知道怎么回事,搞不清楚sas是如何遍历数据集的,烦请高人指点
二维码

扫码加我 拉你入群

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

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

全部回复
2010-2-17 09:25:03
cc11cc11 发表于 2010-2-16 23:17
数据集te.file_list里有4条记录,想以这4条记录作分析对象测试。
写了下面的代码
data temp;                                                                                                                              
set te.file_list;                                                                                                                       
CALL SYMPUT("name", sc);                                                                                                               
%let date="2002-03-01";                                                                                                                 
%out;                                                                                                                                   
                                                                                                                                        run;  
运行结果是只有最后一条记录调用了宏。

而这段代码
data temp;                                                                                                                              
set te.file_list;                                                                                                                       
call execute('CALL SYMPUT("name", sc);                                                                                                               
%let date="2002-03-01";                                                                                                                 
%out;
');
                                                                                                                                        run;  
则显示程序确实调用了4次宏,但每次仍然是最后一条记录数据的sc字段进入了宏变量name。
不知道怎么回事,搞不清楚sas是如何遍历数据集的,烦请高人指点
What do you need is not really clear. Sorry.
二维码

扫码加我 拉你入群

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

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

2010-2-17 21:26:33
我说得不清楚啊?
te.file_list数据集有个字段名为sc,里面有4条观测。宏out以sc为参数被程序调用。
我的意思是当我调用前面一段代码,名为out的宏只会运行一次。按照我的理解,sas程序内置循环,引入数据集的话,程序将会自动循环n次(n=观测数)。
而调用后面的一段代码,out宏会运行4次。
且这两者中方法有个共同的特点:都是将te.file_list里最后一条记录的sc字段存入name宏变量,以致于我不能逐条分析每个观测的sc值。
我的问题是,怎么循环取到每条观测的各个字段值?
二维码

扫码加我 拉你入群

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

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

2010-2-18 07:20:50
cc11cc11 发表于 2010-2-17 21:26
我说得不清楚啊?
te.file_list数据集有个字段名为sc,里面有4条观测。宏out以sc为参数被程序调用。
我的意思是当我调用前面一段代码,名为out的宏只会运行一次。按照我的理解,sas程序内置循环,引入数据集的话,程序将会自动循环n次(n=观测数)。
而调用后面的一段代码,out宏会运行4次。
且这两者中方法有个共同的特点:都是将te.file_list里最后一条记录的sc字段存入name宏变量,以致于我不能逐条分析每个观测的sc值。
我的问题是,怎么循环取到每条观测的各个字段值?
Here is the one. But you need to understand it by reading macro manual. Do NOT learn macro before you have solid data step programming experience.

HTH

1    %macro out(out=);
2    %put out="&out";
3    %mend;
4
5    data t1;
6       do i = 1 to 4;
7         output;
8        end;
9    run;

NOTE: The data set WORK.T1 has 4 observations and 1 variables.
NOTE: DATA statement used (Total process time):
      real time           0.56 seconds
      cpu time            0.06 seconds


10
11   data _null_;
12      set t1;
13      call execute('%out(out='||put(i,5.)||')');
14   run;

out="1"
out="2"
out="3"
out="4"
NOTE: There were 4 observations read from the data set WORK.T1.
NOTE: DATA statement used (Total process time):
      real time           0.20 seconds
      cpu time            0.04 seconds


NOTE: CALL EXECUTE routine executed successfully, but no SAS statements were generated.
二维码

扫码加我 拉你入群

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

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

2010-2-18 19:01:02
进来学习了
二维码

扫码加我 拉你入群

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

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

2011-12-21 09:58:59
why 英格力士?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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