缺失字符串值插值 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;