楼主: StartoVer2
3100 4

刚开始学SAS,有个INPUT的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
49 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1195 点
帖子
23
精华
0
在线时间
41 小时
注册时间
2014-3-12
最后登录
2018-3-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大神们求解答!刚开始看little sas。看到读取数据部分有一个“多个观测在同一行时,INPUT该怎么写”的问题。原始文件如下
文件名:temperature.txt
文件内容:(城市名 州名 日最高温 日最低温)
Nome AK
55 44
Miami FL
90 75
Raleigh NC
88 68


程序如下:
DATA HIGHLOW ;
INFILE '...............' ;
INPUT City $ State $ High Low ;
PROC PRINT DATA=HIGHLOW ;
RUN ;


输出3个观测4个变量如下
Obs      City       State     High     Low
1         Nome      AK        55        44
2         Miami      FL         90        75
3         Raleigh    NC        88        68


但是如果我把原文件改成
Nome AK
55 44 Miami FL 90 75 Raleigh NC
88 68



用同样的程序去读输出结果只有一个观测如下
Obs      City       State     High     Low
1         Nome      AK        55        44


两个问题:未修改时,INPUT读文件是一行一行读。为啥同一行有多个观测的时候不能继续顺序读下去?而且为什么它没有读完第二行继续读第三行?

二维码

扫码加我 拉你入群

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

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

关键词:Input put little infile State little 程序

沙发
wwang111 发表于 2016-7-28 22:27:23 |只看作者 |坛友微信交流群
第一次data loop,input语句读到第二行的44, 此时第一次data loop结束,回到data highlow开始第二次data loop,此时input会自动跳到下一行,就是你修改的文件的第三行,读完86,66之后,没有数据可读,出现lost card情况,所以只会出现一行,楼主可以看一下put到log里面的信息:

DATA HIGHLOW ;
INFILE '------' ;
put "Before input statment execute: "  _all_;
INPUT City $ State $ High Low;
put "After input statement execute: "  _all_;
run;

如果要读取成功,可以用@@, @@符号可以阻止input的时候自动跳到下一行,并且一直读完一行的所有数据:

DATA HIGHLOW ;
INFILE '------' ;
put "Before input statment execute: "  _all_;
INPUT City $ State $ High Low @@;
put "After input statement execute: "  _all_;
run;

使用道具

藤椅
franky_sas 发表于 2016-7-28 22:39:05 |只看作者 |坛友微信交流群
因为你的INPUT有4个输入变量,所以在compile阶段会生成一个能接收4个变量的data vector。然后在一个循环里会直接读两行数据(因为你第一行只有两个字段,就接着去第二行读前两个),当读满一个data vector,把data vector里的数据写到data set里,就表示这一个循环结束。接着开始第二个循环,但开始第二个循环要从下一行开始,不会管当前这一行后面还有没有数据。

使用道具

板凳
StartoVer2 发表于 2016-7-29 11:09:33 |只看作者 |坛友微信交流群
wwang111 发表于 2016-7-28 22:27
第一次data loop,input语句读到第二行的44, 此时第一次data loop结束,回到data highlow开始第二次data l ...
非常感谢~~回答非常清楚~~不知道为啥我的log里面除了程序描述没有其他说明

使用道具

报纸
StartoVer2 发表于 2016-7-29 11:10:27 |只看作者 |坛友微信交流群
franky_sas 发表于 2016-7-28 22:39
因为你的INPUT有4个输入变量,所以在compile阶段会生成一个能接收4个变量的data vector。然后在一个循环里会 ...
非常感谢~~解答非常清楚~~

使用道具

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

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

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

GMT+8, 2024-4-26 23:00