2017-08-06 1 views
0
data tt; 
input init $ ht wt sex $ time @@; 
if ht=. then short=' '; 
else if ht<170 then short='y'; 
else short='n'; 
if wt=. then heavy=' '; 
else if wt<80 then heavy='y'; 
else wt='n'; 
cards; 
qqq 160.4 60.3 m 1 ewe 167.4 81.5 f 3 aqw 168.0 79.34 f 6 
ccc 181.4 87.7 m 19 
;run; 

proc print data=tt; 
run; 





output s like this 
init ht  wt sex time short heavy 
qqq 160.4 60.3 m 1 y  y 
ewe 167.4 .  f 3 y 
aqw 168.0 79.34 f 6 y  y  
ccc 181.4 .  m 19 y` 

なぜwtに欠損値があるのか​​わかりません。 if wt>80 を入力すると、wt(60.3 and 79.34)が欠けて、81.587.7が出力に表示されます。特定の変数のif条件が異なる出力値がありません

+0

最後の行には「短く」と表示されるはずです。私は答えられる言語が分からないが、あなたがそれを見落としているように見えるので、それを指摘している。 – pinkfloydx33

答えて

0

ログを見ると、「欠損値が作成されました....」という注釈があります。また、文字値を数値に変換しようとして失敗したという警告またはエラーがありますか?あなたのIF第2ブロックの

注ELSE文:

if wt=. then heavy=' '; 
else if wt<80 then heavy='y'; 
else wt='n'; 

それはelse heavy='n';でなければなりません。書かれているように、数値変数wtに文字値 'n'を代入しようとしています。 SASは 'n'を数値に変換しようとしますが、失敗すると警告またはエラーがログに記録され、数値の欠損値に変換されます。

関連する問題