楼主: well306
6459 16

[原创博文] 求助SAS读取数据问题~~~ [推广有奖]

  • 0关注
  • 0粉丝

硕士生

1%

还不是VIP/贵宾

-

威望
0
论坛币
70 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
197 点
帖子
147
精华
0
在线时间
85 小时
注册时间
2010-8-5
最后登录
2019-9-3

楼主
well306 发表于 2010-8-19 18:05:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
初学SAS,请教各位高手一小问题,关于循环语句中读取数据文件,如下:

简单举例,假设我有4个TXT文件,每个文件中1个数值变量,共5个观测(如1 2 3 4 5),数据分析前,需要先用循环语句对这几个文件的数据预处理,
我现在的问题在于怎么用SAS语句读取文件,以前做的分析全用VB程序编的:

1.例如,VB语句可以这样写:
For i=1 to 4
       open "E:\" & i & ".txt" for Input As 1
       While Not EOF(1)
                Input #1, b
                a(m) = b
                m = m + 1
        Wend
        Close 1
Next i

2.尝试用SAS语句:
data a;
      do i=1 to 4 by 1;
           infile "E:\" i ".txt";
      end;
      input v ;
run;

---------问题:SAS语句在“Infile”那行的“i”处提示错误,数据读不进去......请问SAS语句中有什么方法可以实现以上用途吗?

--------请各位高手不吝相助,不胜感激~~~
二维码

扫码加我 拉你入群

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

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

关键词:读取数据 infile Input 数据预处理 初学sas 程序

沙发
sushe1527 发表于 2010-8-19 18:12:06
crackman 会这个,我看见他都写了好几遍了

藤椅
hopewell 发表于 2010-8-19 20:38:33
  1. data temp;
  2.         do in=1 to 4;
  3.                 fname=cats('d:\',in,'.txt');
  4.                 do until(last);
  5.                         infile xxx filevar=fname end=last;
  6.                         input v;
  7.                         output;
  8.                 end;
  9.         end;
  10.         stop;
  11. run;
复制代码

板凳
crackman 发表于 2010-8-19 22:56:28
又见到楼上两位老朋友的身影了,也很久没有停留在SAS板块了

报纸
crackman 发表于 2010-8-19 23:23:24
3# hopewell
很多网友,特别对SAS刚入门的网友对程序的理解起来确实很恼火,那我来解释一些程序。
data temp;
        do in=1 to 4;
                fname=cats('d:\',in,'.txt');
                do until(last);
                        infile XXX filevar=fname end=last;
                        input v;
                        output;
                end;
        end;
      stop;
run;

此处注意几点:
1.DO循环:很巧妙的注意到了D盘下TXT文件名的规律性,都是一个数字命名的文件名,用变量IN,采用CATS字符串连接函数,循环创建D盘下的TXT文件名变量FNAME;
2.在读取文本数据时,很多人都知道用INFILE,以及INFILE基本参数,XXX是文件名,filevar是打开或者关闭指定的文件名,end=last是定义一个变量了解是否读到文件的结尾处,这里的LAST与until里面的last保持一致
3.STOP,这里为什么用STOP,这个很重要,如果你去掉STOP,那么你会发现无线循环下去。所以当我们在DATA步里面制定读取的数据是以随机方式读取的时候,例如这个里面的IN,或者是在SET里面的POINT等,需要用STOP。Because SAS does not detect an end-of-file with this access method, you must include program statements to prevent continuous processing of the DATA step.


在这里提出一个思路:我们在解决这类问题的时候,先考虑是一个文件的时候,你如何写程序,如何读取,如果是两个文件的时候,程序与读取一个文件时程序有什么不同,这种不同是什么原因导致,这个不同是否有规律可循,寻找到规律你就有思路了。

地板
well306 发表于 2010-8-20 08:43:18
5# crackman

首先感谢各位好心的帮助。

另外,我想请问“crackman ”版主,你这个语句“特别对SAS刚入门的网友对程序的理解起来确实很恼火”什么意思?是不是也请你给大伙解释一下。

7
soporaeternus 发表于 2010-8-20 09:27:28
版主的意思是
有时候看没有注释的代码会很恼火
特别是某些%&满天飞的代码
而看代码是学习方法和思路最好的方式(个人以为,轻拍)
所以版主大大出了跟版主大大读代码系列.......
古道热肠,一腔热血为苍生啊,阿弥陀佛......
Let them be hard, but never unjust

8
crackman 发表于 2010-8-20 09:57:32
我说了太多的四川方言

9
well306 发表于 2010-8-21 12:42:30
8# crackman

Sorry,可能是我误解了。以后还多向您请教~~

汪国真的诗不错......

10
well306 发表于 2010-8-21 12:51:10
7# soporaeternus

"Anna" 你也喜欢德国的一人乐队“Sopor Aeternus ”呵呵,

“On saturday we used to sleep”的前奏我很喜欢,很有氛围......http://www.cococ.com/play/328179.html (well306)

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

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