Hello - I am relatively new to SAS and a first time poster. I have some code that assigns a random integer to a set of IDs. I have posted this below. Is it possible to create a new ID variable chosen by the user based on these random variables? Ive had trouble with this because the number of new IDs I want to assign inherently changes. Is there a better way to go about this?
data data_1;
Input id_no;
cards;
123
456
789
987
654
;
run;
%macro assign_rand(no_rand=);
%macro randbetween(min,max);
(&Min + floor((1+&max-&min)*Rand("uniform)));
%mend;
data data_1;
set data_1;
random_no = %randbetween(1,&no_rand);
run;
%mend;
Are you looking for something along these lines?
https://gist.github.com/statgeek/fd94b0b6e78815430c1340e8c19f8644
@mike_579357 wrote:
Hello - I am relatively new to SAS and a first time poster. I have some code that assigns a random integer to a set of IDs. I have posted this below. Is it possible to create a new ID variable chosen by the user based on these random variables? Ive had trouble with this because the number of new IDs I want to assign inherently changes. Is there a better way to go about this?
data data_1;
Input id_no;
cards;
123
456
789
987
654
;
run;
%macro assign_rand(no_rand=);
%macro randbetween(min,max);
(&Min + floor((1+&max-&min)*Rand("uniform)));
%mend;
data data_1;
set data_1;
random_no = %randbetween(1,&no_rand);
run;
%mend;
data data_1;
Input id_no;
cards;
123
456
789
987
654
;
run;
data _null_;
set data_1 end=last;
if _n_=1 then call execute('data want;');
call execute(catt('random_no=1 + floor(',id_no,'*Rand("uniform"));output;'));
if last then call execute('run;');
run;
@Ksharp cool code, but would the following be a simpler approach?
data want2;
set data_1;
random_no=1+floor(id_no*rand('uniform'));
run;
Do we need to be sure that the random identifiers are unique?
@ArtC Cool ! Maybe I get confused by OP. Hope one day we could have a meet in the future.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.