Hi All,
I am struggling with the following issue:
I want to use the glm
function within a procedure to estimate a binary outcome variable (logit function).
I am using the following code:
proc(1) = est2(x_1, y_1, d_1, z_1);
local vnam, m, b, stb, vc, stderr, sigma, cx, rsq, resid, dwstat, cov_2_1, cov_2_2, beta_est2_2, y_hat_logit_2_2, d_hat_structure, d_hat_logit_2_1, res_est2;
new; cls;
// prepare datasets as under OLS
cov_2_1 = z_1 ~ x_1[.,4:6];
// create glm structure
struct glmOut d_hat_structure;
d_hat_structure = glm(d_1,cov_2_1,"binomial");
before performing the step with struct glmOut d_hat_structure;
, I get the error: 'Error message: G0505: Invalid structure redefinition 'glmOut''
.
I have tried to clear the structure with the command new;
, but unfortunately, it did not work. Does anyone have an idea of how to handle this?
Many thanks in advance for your help!!
3 Answers
0
accepted
The reason for the error 'Error message: G0505: Invalid structure redefinition 'glmOut''
is that you have d_hat_structure
declared in your list of local variables and declared with the line:
struct glmOut d_hat_structure;
Structures declared as shown in the line above are created as local variables. Structures should not be put in the local variable list. The local variable list is for weakly typed variables such as matrices, strings, arrays, etc.
What you need to do is:
- Remove
d_hat_structure
from the local variable list. - Remove the
new
andcls
from inside the procedure.
new
should never be inside a procedure. If it is in a program, it should always be the first line. It will clear all your data and procedures, so it cannot be used in a procedure.
0
Thanks, that worked well!
However, if I know want to extract some values from the structure, this is not possible any longer:
proc(1) = est2(x_1, y_1, d_1, z_1);
local vnam, m, b, stb, vc, stderr, sigma, cx, rsq, resid, dwstat, cov_2_1, cov_2_2, beta_est2_2, y_hat_logit_2_2, d_hat_logit_2_1, res_est2;
// prepare datasets as under OLS
cov_2_1 = z_1 ~ x_1[.,4:6];
// create glm structure
struct glmControl d_hat_structure;
d_hat_structure = glm(d_1,cov_2_1,"binomial");
d_hat_logit_2_1 = d_hat_structure.yhat;
gives me Error 'G0504: Invalid structure member 'yhat'
for the last line of the code. However, .yhat
should be a member of the structure.
Many thanks again!
0
The problem this time is that you have made d_hat_structure
a glmControl
structure instead of a glmOut
structure. The glmControl
structure contains the optional settings for the glm
estimation. The one you want is the glmOut
structure which holds the estimation results.
Your Answer
3 Answers
The reason for the error 'Error message: G0505: Invalid structure redefinition 'glmOut''
is that you have d_hat_structure
declared in your list of local variables and declared with the line:
struct glmOut d_hat_structure;
Structures declared as shown in the line above are created as local variables. Structures should not be put in the local variable list. The local variable list is for weakly typed variables such as matrices, strings, arrays, etc.
What you need to do is:
- Remove
d_hat_structure
from the local variable list. - Remove the
new
andcls
from inside the procedure.
new
should never be inside a procedure. If it is in a program, it should always be the first line. It will clear all your data and procedures, so it cannot be used in a procedure.
Thanks, that worked well!
However, if I know want to extract some values from the structure, this is not possible any longer:
proc(1) = est2(x_1, y_1, d_1, z_1);
local vnam, m, b, stb, vc, stderr, sigma, cx, rsq, resid, dwstat, cov_2_1, cov_2_2, beta_est2_2, y_hat_logit_2_2, d_hat_logit_2_1, res_est2;
// prepare datasets as under OLS
cov_2_1 = z_1 ~ x_1[.,4:6];
// create glm structure
struct glmControl d_hat_structure;
d_hat_structure = glm(d_1,cov_2_1,"binomial");
d_hat_logit_2_1 = d_hat_structure.yhat;
gives me Error 'G0504: Invalid structure member 'yhat'
for the last line of the code. However, .yhat
should be a member of the structure.
Many thanks again!
The problem this time is that you have made d_hat_structure
a glmControl
structure instead of a glmOut
structure. The glmControl
structure contains the optional settings for the glm
estimation. The one you want is the glmOut
structure which holds the estimation results.