Hello SAS users,
Thank you so much in advance for reading the question.
I have the following sample data and code. These are the data steps I needed:
1. From the first firm, Firm 1, randomly match with another firm, by Group
2. Create a new variable, Year 2 Profit. Use the matched firm's Rate as a growth rate to multiply Firm 1's Year 1 Profit to calculate Firm 1 's Year 2 Profit. Year 2 Profit= Rate * Year 1 Profit
3. Use the new variable, Year 2 Profit, to rematch with a random firm, by Group.
4. Create a new variable, Year 3 Profit. Use the newly matched firm's Rate as a growth rate to multiply Year 2 Profit. Year 3 Profit = Rate * Year 2 Profit
What I look for:
Get all Year 4,5,6,7 Year Profit... for Firm 1.
Get all Year 2,3,4,5,6,7 Year Profit... for all other firms.
Some firms have more than 7 years of data, and some firms have less than 7 years of data. so some may have Year 8 Profit, Year 9 Profit...
Firm | Year | Rate | Group | Year 1 Profit | Year 2 Profit | Year 3 Profit | Year 4 Profit | Year 5 Profit | Year 6 Profit | Year 7 Profit |
A | 2010 | 0.1 | 1 | 100 |
|
|
|
|
|
|
A | 2001 | 0.15 | 2 | 90 |
|
|
|
|
|
|
B | 1998 | 0.01 | 1 | 101 |
|
|
|
|
|
|
B | 1995 | 0.2 | 1 | 95 |
|
|
|
|
|
|
B | 1991 | 0.02 | 2 | 98 |
|
|
|
|
|
|
C | 2010 | 0.3 | 2 | 103 |
|
|
|
|
|
|
C | 2020 | 0.05 | 2 | 110 |
|
|
|
|
|
|
C | 2009 | 0.1 | 3 | 90 |
|
|
|
|
|
|
I have the select code, but dont know how to repeat the process.
proc surveyselect data=have sampsize=1 out=mySamples;
strata group;
run;
Data a1, set mySamples;
Year 2 Profit = Year 1 Profit * Rate;
Run;
proc surveyselect data=a1 sampsize=1 out=mySamples2;
strata group;
run;
Data a2, set mySamples2;
Year 3 Profit = Year 2 Profit * Rate;
Run;
Thank you so much in advance!
Use REPS= on the PROC statement.
Thanks. I dont think the repts = works here since I have a calculation between each random draw.
If you have a program that works, see the below tutorial on converting it to a macro.
But know that I do agree with @data_null__ suggestion of adding REPS and then using BY group processing instead. It's hard to follow exactly what's going on, I don't see how you're matching anything for example.
Tutorial on converting a working program to a macro
This method is pretty robust and helps prevent errors and makes it much easier to debug your code. Obviously biased, because I wrote it 🙂 https://github.com/statgeek/SAS-Tutorials/blob/master/Turning%20a%20program%20into%20a%20macro.md
Examples of common macro usage
https://communities.sas.com/t5/SAS-Communities-Library/SAS-9-4-Macro-Language-Reference-Has-a-New-Ap...
Thank you for the information. I will look into it. I am matching firms by group. As long as they are in the same group, they could be matched. Can you help me with the Macro since I am very new to Macro. Thanks.
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 16. 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.
Select SAS Training centers are offering in-person courses. View upcoming courses for: