Page 2 of 3

Re: Changing variable names in several equations

Posted: Thu Mar 08, 2018 11:44 am
by statsforecast
That seems to work but the equations in which I use Log generate errors: LOG is an illegal or reserved name in "DO_ EQ_XX10012503.
FORECAST LOG(XX10012503)_F". Below is the code I am using:

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq =  @word(%eqlist,!i) 'current equation name
   %var = {%eq}.@varlist
    %var = @word(%var,1)
smpl fore
{%eq}.forecast {%var}_f
series  {%var}_f
next

Re: Changing variable names in several equations

Posted: Thu Mar 08, 2018 12:11 pm
by EViews Gareth
use @makevalidname

Re: Changing variable names in several equations

Posted: Fri Mar 09, 2018 10:44 am
by statsforecast
Hi Gareth,

This works but is not exactly what I need given the set up I already have in E-views and it would mean further work. I am trying to include and IF statement in order to trim the invalid names in order to make valid ones (since all the names follow the same pattern and the ones that are invalids are the ones with log). It would be something like this, but since I am new in E-views programming I am not sure about how to include if statements. Could you help me out please?

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq =  @word(%eqlist,!i) 'current equation name
   %var = {%eq}.@varlist
    %var = @word(%var,1)
if %var = "invalid name" then    'I don't know how to include the error
   %var = @wmid(%var,10,4)
  smpl fore
{%eq}.forecast {%var}f
next

Re: Changing variable names in several equations

Posted: Fri Mar 09, 2018 10:53 am
by statsforecast
Or perhaps loop through both the equations and the series names? but I am not sure how to get the two loops to work properly

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq =  @word(%eqlist,!i) 'current equation name
 %serieslist=@wlookup("*","series")   'make a list of all series in workfile
for !j=1 to @wcount(%serieslist)     'cycle through the list one at a time
   %series =  @word(%serieslist,!j) 'current series name
  smpl fore
{%eq}.forecast  {%series}f
       next
  next

This doesn't seem to do the trick

Re: Changing variable names in several equations

Posted: Fri Mar 09, 2018 10:58 am
by statsforecast
I got it! this worked:

Code: Select all

%serieslist=@wlookup("*","series")   'make a list of all series in workfile
for !j=1 to @wcount(%serieslist)     'cycle through the list one at a time
   %series =  @word(%serieslist,!j) 'current series name
  smpl fore
eq_{%series}.forecast  {%series}f
       next

It was so simple! Thanks anyway.

Re: Changing variable names in several equations

Posted: Tue Mar 13, 2018 8:58 am
by statsforecast
Hi Gareth,

As the following step in this process, I am trying to write a program that after estimating an equation (or rather a batch of equations), looks at the residuals and if the last data point is outside the bands of the residuals graph, put a dummy in the equation with the date associated with that observation. For example, since I have monthly data, a dummy of the type: @event("2018.02") for the last month of data.

Perhaps accessing the residuals table: eqname.resids(t)?
I just don't know how to access the elements of that table in order to write a IF statement or something similar.

Thank you in advance for any help that you can provide.

Re: Changing variable names in several equations

Posted: Tue Mar 13, 2018 9:40 am
by EViews Matt
Hello,

It would probably be easier to use the makeresids proc to copy the residuals to a series and then access that series.

Re: Changing variable names in several equations

Posted: Wed Mar 28, 2018 1:58 pm
by statsforecast
Hi Gareth,

I have been trying with the makeresids proc and it works for generating series for each equation's residuals, but when I try to generate series for the dates of those series, the dates are shifted. I can't figure out why isn't working properly.

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq = @word(%eqlist,!i)  'current equation name
   %estcmd = {%eq}.@command  'current equation's estimation command
  %eqsmpl =  {%eq}.@smpl
   smpl {%eqsmpl}
     'estimate ecuation keeping each estimation sample
   {%eq}.{%estcmd}  're-estimate current equation with its command
  {%eq}.makeresids res{%eq} 'generate series with residuals
  series dateres{%eq}=@date(res{%eq}) 'generate a series of the dates of the residuals
  next
 smpl @all 'reset sample


Thank you in advance for your help.

Re: Changing variable names in several equations

Posted: Wed Mar 28, 2018 2:40 pm
by EViews Matt
Just use "@date" instead of "@date(res{%eq})". You generate dates based on the workfile sample and frequency, not on a specific series. The "(res{%eq})" term shifts the dates by the amount of the first residual, which you observed.

Re: Changing variable names in several equations

Posted: Wed Mar 28, 2018 3:05 pm
by statsforecast
Thank you for replying Gareth. What I am trying to do is to get the last date for which the series have data (the data of the most recent data point), since I am trying to add a dummy for that date if certain conditions are met. I've been trying something like this but it doesn't work too well.

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq = @word(%eqlist,!i)  'current equation name
   %estcmd = {%eq}.@command  'current equation's estimation command
  %eqsmpl =  {%eq}.@smpl
   smpl {%eqsmpl}
     'estimate ecuation keeping each estimation sample
   {%eq}.{%estcmd}  're-estimate current equation with its command
  {%eq}.makeresids res{%eq}
 series dateres{%eq}=@date(res{%eq})
    if  @last(res{%eq}) > (res({%eq}) + @stderrs(res{%eq})) or @last(res{%eq})  < (res({%eq}) + @stderrs(res{%eq})) then
   %estcmd = {%eq}.@command +  "@event("@last(dates{%eq}")"
  endif
 next
 smpl @all 'rese

Re: Changing variable names in several equations

Posted: Wed Mar 28, 2018 3:26 pm
by EViews Matt
x.@last will return the date (as a string) of the last non-NA observation in series x.

Re: Changing variable names in several equations

Posted: Wed Mar 28, 2018 5:12 pm
by statsforecast
Thank you for replying Matt.

When I try the following it generates an error:
NA found in matrix in "IF @LAST(RESEQ_XX001) >
RESEQ_XX001 + @STDERRS(RESEQ_XX001) OR
@LAST(RESEQ_XX001) < RESEQ_XX001 -
@STDERRS(RESEQ_XX001) THEN"

I am basically trying to put a dummy if the last data point is outside of the residuals' one standard error bands

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq = @word(%eqlist,!i)  'current equation name
   %estcmd = {%eq}.@command  'current equation's estimation command
  %eqsmpl =  {%eq}.@smpl
   smpl {%eqsmpl}
     'estimate ecuation keeping each estimation sample
   {%eq}.{%estcmd}  're-estimate current equation with its command
  {%eq}.makeresids res{%eq} 'generate residuals' series
     if  @last(res{%eq}) > res{%eq} + @stderrs(res{%eq}) or @last(res{%eq})  < res{%eq} - @stderrs(res{%eq}) then '
   %estcmd = {%eq}.@command +  "@event("res{%eq}.@last")"
  endif
 next
 smpl @all 'reset sample

Re: Changing variable names in several equations

Posted: Thu Mar 29, 2018 10:46 am
by EViews Matt
I believe what you're after is:

Code: Select all

if @abs(@last(res{%eq})) > {%eq}.@se then
   %estcmd = {%eq}.@command + "@event(" + res{%eq}.@last + ")"
endif

Re: Changing variable names in several equations

Posted: Thu Mar 29, 2018 1:35 pm
by statsforecast
Thank you so much! This is exactly what I was trying to do. It only needed an extra pair of quote marks in the @event()

Code: Select all

%eqlist=@wlookup("*","equation")   'make a list of all equations in workfile
for !i=1 to @wcount(%eqlist)     'cycle through the list one at a time
   %eq = @word(%eqlist,!i)  'current equation name
   %estcmd = {%eq}.@command  'current equation's estimation command
  %eqsmpl =  {%eq}.@smpl
   smpl {%eqsmpl}
     'estimate ecuation keeping each estimation sample
   {%eq}.{%estcmd}  're-estimate current equation with its command
  {%eq}.makeresids res{%eq}
    if @abs(@last(res{%eq})) > {%eq}.@se then
   %estcmd = {%eq}.@command + "@event(""" + res{%eq}.@last +""")"
 endif
'delete  res{%eq}
 next
 smpl @all 'reset sample to keep the original sample workfile


Re: Changing variable names in several equations

Posted: Thu Aug 02, 2018 10:51 am
by statsforecast
How could I generalized this for any observation outside the residuals bands? Something like

Code: Select all

if @abs(@date(res{%eq})) > {%eq}.@se then
   %estcmd = {%eq}.@command + "@event(""" + res{%eq}.@date +""")"


But I get an error " Non Numeric Argument".

Thank you.