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` 

Je ne sais pas pourquoi wt a des valeurs manquantes. Quand je mets if wt>80 alors wt(60.3 and 79.34) sera manquant et 81.5 et 87.7 montrera dans la sortie.Valeurs de sortie manquantes avec une condition if différente pour une variable particulière

+0

Votre dernière ligne devrait également montrer "n" pour "court" je pense. Je ne connais pas la langue pour répondre, mais je le signale parce qu'il semble que vous ayez oublié cela. – pinkfloydx33

Répondre

0

Lorsque vous consultez le journal, y a-t-il une REMARQUE qui indique "les valeurs manquantes ont été créées ...." et peut-être un avertissement ou une erreur à propos d'une tentative échouée de conversion des valeurs de caractères en valeurs numériques?

Notez la ELSE de votre deuxième bloc IF:

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

Il devrait être else heavy='n';. Comme écrit, il essaie d'assigner la valeur de caractère 'n' à la variable numérique wt. SAS essaiera de convertir 'n' en une valeur numérique, et si cela échoue, il enverra un avertissement ou une erreur au journal et le convertira en une valeur numérique manquante.