1

データセットで指定された範囲値から文字情報を作成しようとしています。

データセット:グレード

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

そして、これがinformatを作成するために書いたコードです

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

なぜ informat が機能しないのか理解できません。誰でも私がどこで間違いを犯しているのか説明してもらえますか?

4

1 に答える 1

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 のある行にある) を含むデータセットを作成するか、単にフォーマットを作成して 2 番目のステップで実行する (数値として読み取ってからフォーマットに PUT する) ことができます。

于 2013-07-12T16:32:13.227 に答える