全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1935 4
2010-02-16
有两个问题请高手指点:

1. 如果这样执行下面的程序,log说job 和 joblevel 都是uninitialized。不知道是为什么?应该如何改正?2. 如果可以执行output的话(改正了上面1,或用其它方式),既然job的长度是12,如果在put句子中joblevel前加上@5的话,究竟SAS是如何处理的呢?

data temp;

length job $12.;

input job &;

if job in ("actor i", "actor ii") then joblevel = "b";

if job ="actor iii" then joblevel = "a";

else joblevel ="U";

datalines;

actor i

actor ii

actor iii

actor iii

actor ii

actor ii

actor i

;
run;
data temp;

file "C:\Documents and Settings\All Users\Documents\doc.txt" dlm=",";
put job joblevel;
run;

谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2010-2-16 08:57:44
dolphinfish 发表于 2010-2-16 08:00
有两个问题请高手指点:

1. 如果这样执行下面的程序,log说job 和 joblevel 都是uninitialized。不知道是为什么?应该如何改正?2. 如果可以执行output的话(改正了上面1,或用其它方式),既然job的长度是12,如果在put句子中joblevel前加上@5的话,究竟SAS是如何处理的呢?

data temp;

length job $12.;

input job &;

if job in ("actor i", "actor ii") then joblevel = "b";

if job ="actor iii" then joblevel = "a";

else joblevel ="U";

datalines;

actor i

actor ii

actor iii

actor iii

actor ii

actor ii

actor i

;
run;
data temp;

file "C:\Documents and Settings\All Users\Documents\doc.txt" dlm=",";
put job joblevel;
run;

谢谢!
The default delimiter is space. So when you have a string "actor i", it usually should use fix length format.

job 1-12 tells SAS reads position 1-12 as job values.

Another logic error is according to what I am understanding,
if job ="actor iii" then joblevel = "a";  ---> else if job ="actor iii" then joblevel = "a";

data temp;
length job $12.;
input  job 1-12;
if job in ("actor i", "actor ii") then joblevel = "b";
else if job ="actor iii" then joblevel = "a";
else joblevel ="U";

datalines;
actor i
actor ii
actor iii
actor iii
actor ii
actor ii
actor i
;
run;

proc print; run;
二维码

扫码加我 拉你入群

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

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

2010-2-16 09:19:56
谢谢bobguy,不过这不是个问题啊。因为&解决了embedded blank 的问题

如果按照修改后的程序,我提到的2个问题依然没有解决。。。
二维码

扫码加我 拉你入群

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

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

2010-2-16 14:20:32
dolphinfish 发表于 2010-2-16 08:00
有两个问题请高手指点:

1. 如果这样执行下面的程序,log说job 和 joblevel 都是uninitialized。不知道是为什么?应该如何改正?2. 如果可以执行output的话(改正了上面1,或用其它方式),既然job的长度是12,如果在put句子中joblevel前加上@5的话,究竟SAS是如何处理的呢?

data temp;

length job $12.;

input job &;

if job in ("actor i", "actor ii") then joblevel = "b";

if job ="actor iii" then joblevel = "a";

else joblevel ="U";

datalines;

actor i

actor ii

actor iii

actor iii

actor ii

actor ii

actor i

;
run;
data temp;

file "C:\Documents and Settings\All Users\Documents\doc.txt" dlm=",";
put job joblevel;
run;

谢谢!
1.在file前面加set temp;就可以了
2.在job前加@5等于job的值从第五列开始输入
二维码

扫码加我 拉你入群

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

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

2010-2-16 15:48:53
Thanks!

The first one was really tricky.  Didn't know why it has to be set temp here again but that's great.

The 2nd one was actually to have the fifth column re-written by joblevel.
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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