使用cntlin选项获取信息

时间:2013-07-12 16:20:15

标签: sas

我正在尝试根据数据集中给出的范围值制作角色信息。

数据集:成绩

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

我无法理解为什么信息不起作用。谁能请 解释我犯错的地方。

1 个答案:

答案 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到格式)。