グループ内の各観測に同じ乱数を割り当てようとしています。したがって、以下のデータセットでは、変数 "random"の値はgp = Bの各観測で等しくなり、gp = Aのように観測ごとに別の値をとるなどのようになります。グループごとに乱数を割り当てる
data test ;
input gp $ a b c ;
datalines;
B 2 2 3
B 2 2 3
A 1 2 3
A 1 2 3
C 3 3 4
C 3 3 4
;
は愚かIは、各グループに共通の一意の値に基づいてグループごとに異なるシードを作成しようとした:
data test2 ;
set test ;
seed = a*b*c ;
random = ranuni(seed) ;
run ;
これはグループごとの共通の出発点を作成しますが、明らかに各観察変化します。
グループ内の各観測値に相当する乱数を取得するにはどうすればよいですか?実際のデータセットのサイズが非常に大きいため、ソートやその他の時間がかかるプロセスは避けてください。
必要DATSETは、このように次のようになります。ご質問があれば私に尋ねる、これはトリックを行う必要があります
data want ;
input gp $ a b c random ;
datalines;
B 2 2 3 0.123
B 2 2 3 0.123
A 1 2 3 0.456
A 1 2 3 0.456
C 3 3 4 0.789
C 3 3 4 0.789
;
示されているように、論理的な順序でデータがありますか? – Reeza
データは各グループのIDで並べられます。 – user2568648
'ranuni'関数を使用している場合、シードを変更すると乱数ストリームが変更されることはありません。 'call ranuni'だけがあなたがストリーム中間データステップを変更できるようにします。 'seed'コールは、最初の行/繰り返しの後には全く何もしません。 – Joe