input関数で文字値を数値に変換する際に間違いやすいところ。
Q. 下のプログラムを動かすと、変数Bはどんな値になるでしょうか?
data DT1; length A $10.; A ="10.2"; output; A ="25" ; output; run;
data DT2; set DT1; B = input(A, 16.2); run;
|
答え.
A
|
B
|
---|---|
10.2
|
10.2
|
25
|
0.25
|
整数は、小数になってしまいます。
これは、input関数に指定しているインフォーマットが影響しています。
今回の例では「input(A, 16.2)」なので2桁シフトして「25」から「0.25」になります。
「25」のまま数値化されるのかな、と思いやすいところです。
今回の場合、「input(A, 16.)」とか「input(A, best16.)」とか、データに応じた長さのインフォーマットを指定すればそのままの値「25」で数値化できます。
以下にもう少し例をあげておきます。
input(A, 16.1)
"10.2 " → 10.2
"25" → 2.5
input(A, 16.3)
"10.2" → 10.2
"25" → 0.025
なんでそんな変換しちゃうんだよ!ってなると思いますが、インフォーマットの性質上のもので、そういうものって思うしかないです。
0 件のコメント:
コメントを投稿