BookmarkSubscribeRSS Feed
mike_579357
Calcite | Level 5

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;

 

4 REPLIES 4
Reeza
Super User

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;

 


 

Ksharp
Super User

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;
ArtC
Rhodochrosite | Level 12

@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?

Ksharp
Super User

@ArtC Cool !  Maybe I get confused by OP. Hope one day we could have a meet in the future.

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1538 views
  • 0 likes
  • 4 in conversation