缺失字符串值插值 SAS
Missing String Value Interpolation SAS
我有一系列缺少观察值的字符串值。我想使用平面替换。例如变量 x 有 3 个可用值。在此替换方法下,将缺失值分配给 x 的可用值的概率应该为 33.333%。我该怎么做?
DATA have;
INPUT id a $ b $ c $ x;
CARDS;
1 Y Male . 5
2 Y Female . 4
3 . Female Tall 4
4 Y . Short 2
5 N Male Tall 1
;
Run;
我通过生成随机数和对限制进行硬编码来做到这一点。应该有一种更简单的方法来执行此操作,但出于问题的目的,这应该可行。
option missing='';
data begin;
input a $;
cards;
a
.
b
c
.
e
.
f
g
h
.
.
j
.
;
run;
data intermediate;
set begin;
if a EQ '' then help= rand("uniform");
else help=.;
run;
data wanted;
set intermediate;
format help populated.;
if a EQ '' then do;
if 0<=help<0.33 then a='V1';
else if 0.33<=help<0.66 then a='V2';
else if 0.66<=help then a='V3';
end;
drop help;
run;
您可以使用临时数组来存储可能的值。然后在数组中生成一个随机索引。
DATA have;
INPUT id a $ b $ c $ x;
CARDS;
1 Y Male . 5
2 Y Female . 4
3 . Female Tall 4
4 Y . Short 2
5 N Male Tall 1
;
data want ;
set have ;
array possible_b (2) ('Male','Female') ;
if missing(b) then b=possible_b(1+int(rand('uniform')*dim(possible_b)));
run;
我有一系列缺少观察值的字符串值。我想使用平面替换。例如变量 x 有 3 个可用值。在此替换方法下,将缺失值分配给 x 的可用值的概率应该为 33.333%。我该怎么做?
DATA have;
INPUT id a $ b $ c $ x;
CARDS;
1 Y Male . 5
2 Y Female . 4
3 . Female Tall 4
4 Y . Short 2
5 N Male Tall 1
;
Run;
我通过生成随机数和对限制进行硬编码来做到这一点。应该有一种更简单的方法来执行此操作,但出于问题的目的,这应该可行。
option missing='';
data begin;
input a $;
cards;
a
.
b
c
.
e
.
f
g
h
.
.
j
.
;
run;
data intermediate;
set begin;
if a EQ '' then help= rand("uniform");
else help=.;
run;
data wanted;
set intermediate;
format help populated.;
if a EQ '' then do;
if 0<=help<0.33 then a='V1';
else if 0.33<=help<0.66 then a='V2';
else if 0.66<=help then a='V3';
end;
drop help;
run;
您可以使用临时数组来存储可能的值。然后在数组中生成一个随机索引。
DATA have;
INPUT id a $ b $ c $ x;
CARDS;
1 Y Male . 5
2 Y Female . 4
3 . Female Tall 4
4 Y . Short 2
5 N Male Tall 1
;
data want ;
set have ;
array possible_b (2) ('Male','Female') ;
if missing(b) then b=possible_b(1+int(rand('uniform')*dim(possible_b)));
run;