BookmarkSubscribeRSS Feed
Lidia1
Obsidian | Level 7

I want to create a variable block size in randomization in sas.Block size will be multiple of 8 (3:1:3:1). It will look like something like below (In the example we have 8 obs for block 1,8 obs for block 2,16 for block 3,24 for block 4)

 

var1 block var2 var3
1 1 L 1
2 1 L 1
3 1 L 1
4 1 L 1
5 1 L 1
6 1 L 1
7 1 L 1
8 1 L 1
9 2 L 1
10 2 L 1
11 2 L 1
12 2 L 1
13 2 H 1
14 2 L 1
15 2 L 1
16 2 L 1
17 3 L 1
18 3 H 1
19 3 L 1
20 3 L 1
21 3 L 1
22 3 L 1
23 3 H 1
24 3 L 1
25 3 L 1
26 3 L 1
27 3 L 1
28 3 L 1
29 3 L 1
30 3 L 1
31 3 L 1
32 3 L 1
33 4 L 1
34 4 L 1
35 4 L 1
36 4 L 1
37 4 L 1
38 4 L 1
39 4 L 1
40 4 L 1
41 4 L 1
42 4 L 1
43 4 L 1
44 4 L 1
45 4 L 1
46 4 L 1
47 4 L 1
48 4 L 1
49 4 L 1
50 4 L 1
51 4 L 1
52 4 L 1
53 4 L 1
54 4 L 1
55 4 L 1
56 4 L 1
5 REPLIES 5
PaigeMiller
Diamond | Level 26

Do you want code that is dynamic and figures out the block size? Or do you want to just hard-code 8 8 16 24?

--
Paige Miller
Lidia1
Obsidian | Level 7

I need a dynamic code that will return the block size as multiple of 8 (random).

Shmuel
Garnet | Level 18

Do you have a dataset and you want just to generate the BLOCK variable or

do you want to generate the whole dataset?

 

You can use RANUNI function or any other randomization sas function in order to 

define the block size, something like:

retain block_size;
block_size = int(ranuni(-1) * 80); /* any value in range 1-80 */
do i=1 to block_size;
     /* any other computation, assiging value to variables */
    OUTPUT;
end;

Insert that code in the data step - either to generate a new dataset or to add observation to a given one.

PaigeMiller
Diamond | Level 26

UNTESTED CODE

proc summary nway data=have;
    class block;
    var var1;
    output out=block_size n=block_size;
run;
data want;
     merge have block_size;
     by block;
run;

There's nothing here that forces the block size to be a multiple of 8, it just computes the number of records in each block.

--
Paige Miller
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
  • 5 replies
  • 2276 views
  • 0 likes
  • 3 in conversation