我正在尝试根据数据集中给出的范围值制作角色信息。
数据集:成绩
Start End Label Fmtname Type
0 20 A $grad I
21 40 B $grad I
41 60 C $grad I
61 80 D $grad I
81 100 E $grad I
这是我编写的用于创建信息的代码
proc format cntlin = grade;
run;
现在使用新信息
创建临时数据集的代码data temp;
input grade : $grad. @@ ;
datalines;
21 30 0 45 10
;
我想要的输出是数据集Temp,值为:
Grade
A
B
A
..
数据集Temp具有值:
Grade
21
30
0
...
SAS日志条目:
1146 proc format cntlin = grade;
NOTE: Informat $GRAD has been output.
1147 run;
NOTE: PROCEDURE FORMAT used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
NOTE: There were 5 observations read from the data set WORK.GRADE.
1148
1149
1150 data temp;
1151 input grade : $grad. @@ ;
1152
1153 datalines;
NOTE: SAS went to a new line when INPUT statement reached past the end of a
line.
NOTE: The data set WORK.TEMP has 5 observations and 1 variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds
我无法理解为什么信息不起作用。谁能请 解释我犯错的地方。
答案 0 :(得分:1)
INFORMATS将字符转换为(字符或数字)。所以你不能像你这样做那样使用START / END,因为这只适用于数字。
请参阅以下内容:
proc format;
invalue $grade
'0'-'20'="A"
'21'-'40'="B"
'41'-'60'="C"
'61'-'80'="D"
'81'-'100'="E";
quit;
proc format;
invalue $grade
'21'='A';
quit;
后者有效,前者给你一个错误。因此,您可以编写一个包含所有101个值的数据集(每个数据集都在START行上),或者只写一个格式并在第二步中执行(以数字形式读入然后PUT到格式)。