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!
... View more