楼主: luorongjin
2679 12

[原创博文] 请教高手指点一下data步中的程序 [推广有奖]

  • 1关注
  • 6粉丝

已卖:651份资源

副教授

6%

还不是VIP/贵宾

-

威望
0
论坛币
7111 个
通用积分
12.2590
学术水平
7 点
热心指数
19 点
信用等级
5 点
经验
912 点
帖子
301
精华
0
在线时间
941 小时
注册时间
2010-4-25
最后登录
2024-12-27

楼主
luorongjin 发表于 2010-8-7 16:55:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集a如下:
Ruth  39 11
Jose  32 22
sue   30 33
John  40 44
data a;                                                                                                                                 
infile 'C:\Documents and Settings\Administrator\桌面\sas程序\test.txt';                                                                 
input name $ 1-4;                                                                                                                       
if name='sue' then input age 7-8;                                                                                                      
else input innum 10-11;                                                                                                                 
run;                                                                                                                                    
proc print data=a;                                                                                                                     
run;
结果如下:
                                                 Obs    name    age    innum
                                                      1     Ruth      .      22
                                                      2     sue      40       .

本人新手,请教高手如下问题:在第一个if语句中,输入的第一个name为:Ruth,不符合if语句,下面的esle语句导入的innum我觉得应该是11,为什么会是22呢,还有下面sue的age为什么会是40,程序是怎么样跑的,谢谢大家!
二维码

扫码加我 拉你入群

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

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

关键词:data步 高手指点 Data 请教高手 documents Documents 程序

回帖推荐

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

少个@

clark1025 发表于2楼  查看完整内容

建议你直接input进来,再折腾 data a; infile 'C:\Documents and Settings\Administrator\桌面\sas程序\test.txt'; input name $ 1-4 age 7-8 innum 10-11; run; data a; set a; if name='SUE' then x=age; else x=innum; run; ...

soporaeternus 发表于7楼  查看完整内容

不加@,一个input执行完直接跳至下一行输入数据头,所以不断发生跳行现象

本帖被以下文库推荐

沙发
clark1025 发表于 2010-8-7 17:18:54
建议你直接input进来,再折腾
data a;
infile 'C:\Documents and Settings\Administrator\桌面\sas程序\test.txt';                                                                 
input name $ 1-4 age 7-8 innum 10-11;                                                                                                                 
run;

data a;
set a;
if name='SUE'  then x=age;
else x=innum;
run;

x应该是你要的?
扯淡到底

藤椅
hopewell 发表于 2010-8-7 17:26:40
少个@
  1. data a;
  2.         input name $ 1-4 @;
  3.         if name='sue' then input age 7-8;
  4.         else input innum 10-11;
  5. datalines;
  6. Ruth  39 11
  7. Jose  32 22
  8. sue   30 33
  9. John  40 44
  10. ;
复制代码

板凳
lovemanbbs 发表于 2010-8-7 17:58:04
hopewell 正解,加上@后,开始只是输入了name这一列,后用IF语句判断

报纸
luorongjin 发表于 2010-8-7 17:58:30
你好,首先感谢的答复。
其次,我知道加个@能得到这个数据集,这个程序是我做base 123时候里面的一道题目,题设程序就是我上面的,答案是下面的显示结果。我看不懂了,所以来请教一下。

地板
lovemanbbs 发表于 2010-8-7 22:20:23
这个问题有意思,希望高手解释一下

7
soporaeternus 发表于 2010-8-8 08:01:25
不加@,一个input执行完直接跳至下一行输入数据头,所以不断发生跳行现象
Let them be hard, but never unjust

8
sopching 发表于 2010-8-8 09:05:04
soporaeternus 正解 !
所以要加一个@控制指针停在这行,不要跳到下一行     LZ还要注意@@ 和@的区别哦! 虽然都能让指针停止在该行,但作用不同。

9
sxlion 发表于 2010-8-8 09:10:02
运行结果正常,没有问题。典型的双input,一个input读一行,两个input读两行。
你去掉一些迷惑人的东西,就知道怎么回事了。
Ruth  39 11
Jose  32 22
sue   30 33
John  40 44
data a;                                                                                                                                 
infile 'C:\Documents and Settings\Administrator\桌面\sas程序\test.txt';                                                                 
input name $ 1-4;                                                                                                                       
input age 7-8;                                                
run;                                                                                                                                    
proc print data=a;                                                                                                                     
run;
已有 1 人评分学术水平 收起 理由
luorongjin + 1 回答很好

总评分: 学术水平 + 1   查看全部评分

10
lovemanbbs 发表于 2010-8-8 15:37:56
7# soporaeternus

请教,是不是可以这样理解:
开始遇见input,输入Ruth,接着跳至第二行Jose前面,if语句判断,输出22,这时遇见input跳至sue前面~~接下来就没有再输入了
结果因该为:
Obs    name    age    innum
  1        Ruth        .         22
这样理解哪里出错了,请教大虾

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

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