楼主: cc11cc11
6650 5

[原创博文] 求教遍历数据集问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

45%

还不是VIP/贵宾

-

威望
0
论坛币
37 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
226 点
帖子
13
精华
0
在线时间
38 小时
注册时间
2009-11-20
最后登录
2017-2-16

楼主
cc11cc11 发表于 2010-2-16 23:17:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据集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是如何遍历数据集的,烦请高人指点
二维码

扫码加我 拉你入群

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

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

关键词:数据集 EXECUTE symput 请高人指点 file 记录

回帖推荐

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

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 ...

本帖被以下文库推荐

沙发
bobguy 发表于 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.

藤椅
cc11cc11 发表于 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值。
我的问题是,怎么循环取到每条观测的各个字段值?

板凳
bobguy 发表于 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.
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

报纸
醉_清风 发表于 2010-2-18 19:01:02
进来学习了
从来不需要想起 永远也不会忘记

地板
cynthialam 发表于 2011-12-21 09:58:59
why 英格力士?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 07:37