Hello,
I have an unbalanced panel dataset across 10 years as follows. Here are my variables:
Y= dependent variable
x1= predictor
x1_2 = predictor (squared)
x3 = moderator
name | time | gvkey | y | x1 | x1_2 | x3 |
abc | 1 | 10553 | 0.95 | -0.20 | 0.04 | 0.34 |
abc | 2 | 10553 | 1.20 | |||
abc | 3 | 10553 | 1.29 | -0.45 | 0.20 | 0.44 |
abc | 4 | 10553 | 1.62 | -0.32 | 0.10 | 0.23 |
… | ||||||
xyz | 1 | 7435 | 1.97 | -1.09 | 1.19 | |
xyz | 2 | 7435 | 1.86 | -0.69 | 0.48 | 0.41 |
xyz | 3 | 7435 | 1.90 | -0.70 | 0.49 | 0.42 |
xyz | 4 | 7435 | 1.94 | -1.90 | 3.62 | 2.67 |
Here's SAS codes to run regression where x3 has been split into high sample:
proc panel data=test_xlag ;
inst depvar
exogenous=( x3_high )
pred=(x1 x1_2) ;
model y_high = x3_high x1 x1_2
/ gmm twostep maxband=1 time robust ;
id gvkey time;
run;
Here's SAS codes to run regression where x3 has been split into low sample:
proc panel data=test_xlag ;
inst depvar
exogenous=( x3_low )
pred=(x1 x1_2) ;
model y_low = x3_low x1 x1_2
/ gmm twostep maxband=1 time robust ;
id gvkey time;
run;
Here's SAS codes to run both regressions in a DO LOOP:
data test_xlag;
do X1 = -3.0 to 0 by 0.1;
y_high = 0.136544 + (-0.04991)*X1 + (-0.00773)*X1*X1 ;
y_low = 0.152363 + (-0.05342)*X1 + (-0.00836)*X1*X1 ;
output;
end;
run;
Let's assume I've created the ANNOTATE dataset and produce the plot in the attached file. The plot is an inverse U-shaped curve. It has 2 parallel curvilinear lines (red curve = depicts regression based on high sample, blue curve = depicts regression based on low sample). In the plot, x axis is range of x1 values, and y axis is range of y values.
Here are my questions:
(1) How do create a DO LOOP in SAS 9.3 that would allow me to statistically compare the red line to the blue line for x1 ranging from -0.1 to -1.0 at increments of 0.1? How do I test whether the red line is statistically different from the blue line at each specified values of x1? I would need chi-square values and p-values for each set of red/blue comparisons at each of the ten x1 values.
(2) How do I generate marginal effects and standard errors for each of blue line and red line at each of the 10 specified x1 values (for a total of 20 values)? What SAS procedure do I use?
Below are the STATA codes to generate what I need for (1) and (2). Can someone help me translate these STATA codes into SAS codes?
margins, at(x1 = (-0.1 (0.1) -1.0) x3_high=(0 1 )) post
margins, coeflegend
forvalues i = 1(2)20 {
loc j = `i' +1
test _b[`i'._at] = _b[`j'._at]
}
Thanks in advance!
Hello,
I have an unbalanced panel dataset across 10 years as follows. Here are my variables:
Y= dependent variable
x1= predictor
x1_2 = predictor (squared)
x3 = moderator
name | time | gvkey | y | x1 | x1_2 | x3 |
abc | 1 | 10553 | 0.95 | -0.20 | 0.04 | 0.34 |
abc | 2 | 10553 | 1.20 | |||
abc | 3 | 10553 | 1.29 | -0.45 | 0.20 | 0.44 |
abc | 4 | 10553 | 1.62 | -0.32 | 0.10 | 0.23 |
… | ||||||
xyz | 1 | 7435 | 1.97 | -1.09 | 1.19 | |
xyz | 2 | 7435 | 1.86 | -0.69 | 0.48 | 0.41 |
xyz | 3 | 7435 | 1.90 | -0.70 | 0.49 | 0.42 |
xyz | 4 | 7435 | 1.94 | -1.90 | 3.62 | 2.67 |
Here's SAS codes to run regression where x3 has been split into high sample:
proc panel data=test_xlag ;
inst depvar
exogenous=( x3_high )
pred=(x1 x1_2) ;
model y_high = x3_high x1 x1_2
/ gmm twostep maxband=1 time robust ;
id gvkey time;
run;
Here's SAS codes to run regression where x3 has been split into low sample:
proc panel data=test_xlag ;
inst depvar
exogenous=( x3_low )
pred=(x1 x1_2) ;
model y_low = x3_low x1 x1_2
/ gmm twostep maxband=1 time robust ;
id gvkey time;
run;
Here's SAS codes to run both regressions in a DO LOOP:
data test_xlag;
do X1 = -3.0 to 0 by 0.1;
y_high = 0.136544 + (-0.04991)*X1 + (-0.00773)*X1*X1 ;
y_low = 0.152363 + (-0.05342)*X1 + (-0.00836)*X1*X1 ;
output;
end;
run;
Let's assume I've created the ANNOTATE dataset and produce the plot in the attached file. The plot is an inverse U-shaped curve. It has 2 parallel curvilinear lines (red curve = depicts regression based on high sample, blue curve = depicts regression based on low sample). In the plot, x axis is range of x1 values, and y axis is range of y values.
Here are my questions:
(1) How do create a DO LOOP in SAS 9.3 that would allow me to statistically compare the red line to the blue line for x1 ranging from -0.1 to -1.0 at increments of 0.1? How do I test whether the red line is statistically different from the blue line at each specified values of x1? I would need chi-square values and p-values for each set of red/blue comparisons at each of the ten x1 values.
(2) How do I generate marginal effects and standard errors for each of blue line and red line at each of the 10 specified x1 values (for a total of 20 values)? What SAS procedure do I use?
Below are the STATA codes to generate what I need for (1) and (2). Can someone help me translate these STATA codes into SAS codes?
margins, at(x1 = (-0.1 (0.1) -1.0) x3_high=(0 1 )) post
margins, coeflegend
forvalues i = 1(2)20 {
loc j = `i' +1
test _b[`i'._at] = _b[`j'._at]
}
Thanks in advance!
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 25. 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.