全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1511 3
2010-05-12
请问当使用set dataset point=i;时在什么情况下需使用stop语句,不明白其运行过程。如以下就是死循环:
data gh;
do i=1 to 19;
set sashelp.class point=i;
output;
end;
run;
而以下的程序就并没使用stop却不是死循环:
data one;                  
  input id $ fruit $;      
datalines;                 
a apple                    
a apple                    
b banana                  
c coconut                  
c coconut                  
c coconut                  
;                          
                           
data two;                  
  input id $ color $;      
datalines;                 
a amber                    
b brown                    
b black                    
c cocoa                    
c cream                    
;               
data every_combination;
  /* Set one of your data sets, usually the larger data set */
  set one;
  do i=1 to n;
    /* For every observation in the first data set,    */
    /* read in each observation in the second data set */
    set two point=i nobs=n;
    output;
  end;
run;注(此程序为论坛中的)
谢谢了。
二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-12 23:25:46
没用SAS,是个好软件。
最近一直都在用MATLAB
二维码

扫码加我 拉你入群

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

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

2010-5-13 01:31:54
In default, the DATA step continues to read observations until it reaches the end-of-file marker in the input data. However, because the POINT= option  accesses observations directly, SAS cannot read
an end-of-file indicator as it would if the file were being read sequentially.
在第一个程序里,只执行了一次data iteration,data步找不到这个end-of-file marker ,而陷入死循环中。因此你必须用stop强制data步的停止,仅输出你Point的那些观测。
而在第二个程序里,你要注意在do循环之前 有个set one的语句。在第5次 data iteration的时候找到了这个Marker了。因此这是不需要stop也可以运行。其中one中的每个观测和 two的所有观测Merge,two中的Id覆盖了one的Id值。
个人理解,希望有所帮助。
二维码

扫码加我 拉你入群

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

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

2010-5-13 12:21:50
非常感谢三楼的解释
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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