楼主: 2286116865
5729 6

[问答] 请教关于sas array. [推广有奖]

  • 2关注
  • 4粉丝

讲师

16%

还不是VIP/贵宾

-

威望
0
论坛币
367 个
通用积分
1.7284
学术水平
1 点
热心指数
6 点
信用等级
1 点
经验
7033 点
帖子
294
精华
0
在线时间
294 小时
注册时间
2015-5-3
最后登录
2024-1-1

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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),。
请大家帮我解答解答,先谢谢了!





二维码

扫码加我 拉你入群

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

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

关键词:array ARR Ray TEMPORARY qualify

回帖推荐

wwang111 发表于3楼  查看完整内容

1. 程序会在编译过程中,按照变量出现的顺序,把所有变量放到PDV中,并且初始值设为空值,在你的程序里面,除了score数据集里面的变量,k和i 同样是变量,跟score数据集里面的变量地位是一样的,所以同样会输出到新数据集当中。 2. 在执行do循环的时候,每次循环的变量遇到end, 都会自动加1,拿你提供的程序来说,在执行第一次循环的时候,i=1,执行到end的时候,说明第一次循环结束,此时,i 的值自动加1,变成2,回到do语句, ...
沙发
2286116865 发表于 2016-8-3 10:40:10 |只看作者 |坛友微信交流群
对了,还有一点,为什么说上面两个ARRAY语句在程序编译的时候已经声明,程序不会执行一个声明语句。
不太清除这里的声明是怎么声明的,感觉和其他的array也没什么特别的呀,网上也没查到专门的解释,望大家帮我理解理解,谢谢了。

使用道具

藤椅
wwang111 发表于 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语句本身是不会执行的。

使用道具

板凳
2286116865 发表于 2016-8-3 11:56:37 |只看作者 |坛友微信交流群
谢谢老师,,刚刚结合一些例子去理解老师你说的,觉得稍稍有所领悟,接下来我要去百度compile time statement了,哈哈哈!

使用道具

报纸
2286116865 发表于 2016-8-3 11:59:55 |只看作者 |坛友微信交流群
wwang111 发表于 2016-8-3 11:34
1. 程序会在编译过程中,按照变量出现的顺序,把所有变量放到PDV中,并且初始值设为空值,在你的程序里面, ...
compile time statement:老师,这个是翻译为编译时语句吗?

使用道具

地板
wwang111 发表于 2016-8-3 12:14:40 |只看作者 |坛友微信交流群
2286116865 发表于 2016-8-3 11:59
compile time statement:老师,这个是翻译为编译时语句吗?
我觉得你只要理解这个语句只在编译的过程中起作用就可以,具体怎么翻译倒不是很重要

使用道具

7
2286116865 发表于 2016-8-3 13:30:05 |只看作者 |坛友微信交流群
wwang111 发表于 2016-8-3 12:14
我觉得你只要理解这个语句只在编译的过程中起作用就可以,具体怎么翻译倒不是很重要
好的,我慢慢领悟吧,以后应该会遇到好多compile time statement

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 07:49