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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.