%let SEED = 2;
%let N_BEERS = 50;
%let ranChar = byte(rank('A')+26*ranuni(&SEED));
%let ranDigit = byte(rank('0')+10*ranuni(&SEED));
data allBeers;
do beer_id = 1 to &N_BEERS;
beer_name = &ranChar. || &ranChar. || &ranChar.
|| &ranDigit.|| &ranDigit.|| &ranDigit.
;
output;
end;
run;
其中定义了ranchar和randigit这两个宏变量,然后在data步中使用它们。
但是这样的问题也有一个弊端,就是前三位一定是字母,而后三位一定是数字,因为这是由宏变量定义的。所以,如果我想要生成一个更随机的名字,连我自己也不知道第一位是数字还是字母,这时我觉得可以直接定义前两个宏变量分别为 ran1 和ran2,然后再生成一个随机变量ran3,使它取值为1或者2,这样在data步中调用&&ran&ran3.但是我始终不得其法。
%let ran1 = byte(rank('A')+26*ranuni(&SEED));
%let ran2 = byte(rank('0')+10*ranuni(&SEED));
data _null_;
b1 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
b2 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
b3 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
b4 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
b5 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
b6 = ifn((ranuni(&SEED) > 0.5 ), 1, 2) ;
call symputx('b1', b1);
call symputx('b2', b2);
call symputx('b3', b3);
call symputx('b4', b4);
call symputx('b5', b5);
call symputx('b6', b6);
put b1 b2 b3 b4 b5 b6;
run;
data allBeers;
do beer_id = 1 to &N_BEERS;
beer_name = &&ran&b1. || &&ran&b2. || &&ran&b3.|| &&ran&b4.|| &&ran&b5.||&&ran&b6.
;
output;
end;
run;
我想到的是这样一种方法,虽然这样可以一定程度上得到更随机的数字字母的组合,但是问题是从第一个到最后一个数据的所有类型都是一样的,也就是说,所有数据(这里定义50个)他们第一位都是数字(字母),第二个都是字母(或数字),想问问版上的大牛,有没有更随机的方法,比如第一个名字是PIT98T (字母|字母|字母|数据|数据|字母),第二个是(字母|数字|字母||数字|数字|数字),反正更加随机没有规律可循的。
谢谢大家了。



雷达卡




京公网安备 11010802022788号







