Как сгенерировать одинаковую случайную величину в sas - PullRequest
0 голосов
/ 01 января 2019

Я хочу создать переменную want, которая является случайно сгенерированным числом после равномерного распределения для набора данных data.Я хочу, чтобы число было одинаковым для всех строк.Я попробовал следующее:

data data; set data; want = ranuni(0) ; run;

Но это дает разные значения для каждой строки.

Я также попытался сгенерировать макропеременную, а затем передать значение в набор данных, но я изо всех сил пытаюсь заставить его работать.Может ли кто-нибудь научить меня, как это сделать, пожалуйста?

Я попробовал следующее:

%let want1= %ranuni(0) ;

Я также попробовал:

%let want1= %eval ( ranuni(0) );

data data;
set data;
want = &want1;
run;

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Используйте %sysfunc для кодирования gen фиксированного случайного числа, назначенного на шаге DATA.

data data; 
  set data;
  want = %sysfunc(ranuni(0));
run; 

Вот версия SQL, использующая ее для сравнения:

proc sql;
  alter table have add want num;
  update have set want=%sysfunc(ranuni(0));
quit;
0 голосов
/ 01 января 2019

Чтобы установить одно и то же значение для каждого наблюдения, используйте оператор RETAIN, чтобы SAS не сбрасывал значение при запуске следующей итерации шага данных.

data want;
  set have;
  if _n_=1 then myvar = ranuni(0) ; 
  retain myvar;
run;

Для использования функций в макросе вам нужноиспользовать функцию макроса% SYSFUNC ().

%let mvar = %sysfunc(ranuni(0));

data want;
  set have;
  retain myvar &mvar ;
run;
...