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;