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.5
和87.7
将显示在输出中。
答案 0 :(得分:0)
当你查看日志时,是否有一个注释说“创建了缺失值......”并且可能是关于尝试将字符值转换为数值失败的警告或错误?
请注意第二个IF块的ELSE语句:
if wt=. then heavy=' ';
else if wt<80 then heavy='y';
else wt='n';
应该是else heavy='n';
。如上所述,它试图将字符值'n'分配给数字变量wt。 SAS会尝试将'n'转换为数值,当失败时,它会向日志发出警告或错误并将其转换为数字缺失值。