全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5996 6
2016-08-03
data score;                                                                                                                             
input id$ x y z;                                                                                                                        
cards;                                                                                                                                 
a 75 84 65                                                                                                                              
b 54 74 71                                                                                                                              
c 51 56 52                                                                                                                              
d 50 50 60                                                                                                                              
;                                                                                                                                       
run;                                                                                                                                    
data qualify;                                                                                                                           
set score;                                                                                                                              
k=0;                                                                                                                                    
array chengji(3) x y z;                                                                                                                 
array base(3)_temporary_ (60,60,60);                                                                                                   
do i=1 to 3;                                                                                                                           
if chengji(i) ge base(i) then k+1;;                                                                                                     
end;                                                                                                                                    
if k=3 then output qualify;                                                                                                            
run;   
结果如下:
结果.png
结果中的字体可能有点小,数据集qualify本来有ID x y z 四个变量,整个程序运行后发现数据集中多了两个变量K 和 i ,在下的疑问有两点:
1、不知道k 和 i 为什么会进入到数据集qualfy中;
2、变量 i 的值为什么是4?
3、这里为什么选择临时数组:array base(3)_temporary_ (60,60,60),。
请大家帮我解答解答,先谢谢了!





二维码

扫码加我 拉你入群

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

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

全部回复
2016-8-3 10:40:10
对了,还有一点,为什么说上面两个ARRAY语句在程序编译的时候已经声明,程序不会执行一个声明语句。
不太清除这里的声明是怎么声明的,感觉和其他的array也没什么特别的呀,网上也没查到专门的解释,望大家帮我理解理解,谢谢了。
二维码

扫码加我 拉你入群

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

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

2016-8-3 11:34:26
1. 程序会在编译过程中,按照变量出现的顺序,把所有变量放到PDV中,并且初始值设为空值,在你的程序里面,除了score数据集里面的变量,k和i 同样是变量,跟score数据集里面的变量地位是一样的,所以同样会输出到新数据集当中。

2. 在执行do循环的时候,每次循环的变量遇到end, 都会自动加1,拿你提供的程序来说,在执行第一次循环的时候,i=1,执行到end的时候,说明第一次循环结束,此时,i 的值自动加1,变成2,回到do语句,发现i=2仍然符合条件,进行第二次循环,依次类推,当第三次循环到end的时候,i 还是会加1,此时i=4, 回到do继续循环,此时,sas会发现i=4已经超过了do循环的范围,所以循环结束,程序会继续执行do循环后面的部分,但此时i 的值已经是4了。

3. 我个人的理解,临时数组不会在数据集中产生变量,也就是你程序里面的base1, base2, base3不会出现在数据集中,如果数据集很大的话,再产生这些变量,会占很多内存。

4. 我觉得你只需要知道array语句是一个 compile time statement,目的是把array的变量初始化到PDV中,array语句本身是不会执行的。
二维码

扫码加我 拉你入群

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

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

2016-8-3 11:56:37
谢谢老师,,刚刚结合一些例子去理解老师你说的,觉得稍稍有所领悟,接下来我要去百度compile time statement了,哈哈哈!
二维码

扫码加我 拉你入群

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

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

2016-8-3 11:59:55
wwang111 发表于 2016-8-3 11:34
1. 程序会在编译过程中,按照变量出现的顺序,把所有变量放到PDV中,并且初始值设为空值,在你的程序里面, ...
compile time statement:老师,这个是翻译为编译时语句吗?
二维码

扫码加我 拉你入群

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

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

2016-8-3 12:14:40
2286116865 发表于 2016-8-3 11:59
compile time statement:老师,这个是翻译为编译时语句吗?
我觉得你只要理解这个语句只在编译的过程中起作用就可以,具体怎么翻译倒不是很重要
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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