Hello everyone.

This is my first time posting here, and I do so because I haven't been able to find the answer to this question through googling. I apologize in advance if it exists somewhere in the forum.

I have a patient dataset for controls, and one for cases. I need to create a 3:1 match, controls:cases. Without replacement.
I need to create a dummy variable, "i", like the one in the examples below.

The dummy has a sequence of 1 2 3 1 2 3 etc if sex, birthyear and caseyear is the same, and breaks when it changes.
For the controls, I need a sequence of 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3 etc, with the same conditions as for cases.
- And also a variable, count, in the controls, that matches the controls to the cases.

Cases example
sex birthyear caseyear i
K 1930 1990 1
K 1930 1990 2
K 1930 1990 3
K 1930 1991 1
K 1930 1991 2

Controls example
sex birthyear caseyear i
K 1930 1990 1
K 1930 1990 1
K 1930 1990 1
K 1930 1990 2
K 1930 1990 2
K 1930 1990 2
K 1930 1990 3


If it is any help, here is the SAS code that does what I need. It also has

Code:
data cases_match;
                set cases_final;
                by sex birthyear caseyear;
                i+1:
                if first.caseyear then i = 1;
run;
data controls_match;
                retain count I;   
                set controls;
                by sex birthyear caseyear;
                if _n_ = 1 or first.caseyear then do;
                                count = 1;
                                i = 1;
                end;
                else do;
                                if count = 3 then do;
                                                count = 1;
                                                i = i+1;
                                end;
                                else
                                                count = count + 1;
                                end;
                run;
Thank you in advance for any help.

Best regards,
Henrik