Help using Base SAS procedures

macro for a rolling window regression

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 118
Accepted Solution

macro for a rolling window regression

I am working on a research project and have trouble come up with a way to conduct a rolling window regression. In my proc model I include this macro to do my rolling window.

%do fen = %eval(&dfen) %to 100;

where %eval(&fen) le obs le %eval(36+&fen-1);

However, my proc model is done by id and as you can see in this macro I suppose that the number of observations is 100 for each id but this is not true I have a different number of observation for each id. In my database I add a column which indicates the number of total number of observation for each id (nb).

How can I change the fixed number 100 to a changing variables called nb?

I try to do it like this :

%do fen = %eval(&dfen) %to %eval(&nb);

where %eval(&fen) le obs le %eval(36+&fen-1);

but I have this error

ARNING: Apparent symbolic reference NB not resolved.

ERROR: The text expression &NB contains a recursive reference to the macro variable NB.  The

       macro variable will be assigned the null value.


Accepted Solutions
Solution
‎11-19-2014 04:51 PM
PROC Star
Posts: 7,468

Re: macro for a rolling window regression

In case my example wasn't sufficiently clear, here is the same type of code for doing proc reg on sashelp.class using rolling windows of 5 records within each sex. BTW, you appear to never mark your questions as having been answered, thus many of us continue to spend probably unnecessary time on them:

filename runit temp;

data _null_;

  length script $255;

  file runit;

  set test (keep=sex);

  by sex;

  if first.sex then do;

    grp=0;

    counter=1;

  end;

  else counter+1;

  if counter ge 5 then do;

    grp+1;

    script=catt('Title "Predicting age by height and weight -- Sex=',

     sex,' group=',grp,'";');

    put script;

    script=catt("proc reg data=test (firstobs=",_n_-4," obs=",_n_,

     "); model age=height weight; run;");

    put script;

  end;

run;

%include runit;

View solution in original post


All Replies
Super User
Posts: 11,343

Re: macro for a rolling window regression

This forum works best when only a single thread is opened for a give topic. If a suggestion is made to post in another subject area that's okay, but generally multiple threads are not needed.

Solution
‎11-19-2014 04:51 PM
PROC Star
Posts: 7,468

Re: macro for a rolling window regression

In case my example wasn't sufficiently clear, here is the same type of code for doing proc reg on sashelp.class using rolling windows of 5 records within each sex. BTW, you appear to never mark your questions as having been answered, thus many of us continue to spend probably unnecessary time on them:

filename runit temp;

data _null_;

  length script $255;

  file runit;

  set test (keep=sex);

  by sex;

  if first.sex then do;

    grp=0;

    counter=1;

  end;

  else counter+1;

  if counter ge 5 then do;

    grp+1;

    script=catt('Title "Predicting age by height and weight -- Sex=',

     sex,' group=',grp,'";');

    put script;

    script=catt("proc reg data=test (firstobs=",_n_-4," obs=",_n_,

     "); model age=height weight; run;");

    put script;

  end;

run;

%include runit;

Frequent Contributor
Posts: 118

Re: macro for a rolling window regression

thanks for your help.

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 476 views
  • 0 likes
  • 3 in conversation