# How to create a second loop?

Hi guys, I have the following problem. I have the following code:

``````_shock=2;
Names=MakeStrMat(9,1);
Names[1]="Capital Stock";
Names[2]="Growth";
Names[3]="Output";
Names[4]="Taxable income";
Names[5]="Consumption";
Names[6]="Investment";
Names[7]="Hours worked";
Names[8]="Real wages";
Names[9]="Rent rate of capital";
Legend=MakeStrMat(2,1);
Legend[1]="Variable marginal tax rate";
Legend[2]="Constant marginal tax rate";

struct PlotControl myPlot;
myPlot=PlotGetDefaults("XY");
PlotOpenWindow();
PlotSetLegend(&myPlot,Legend);

te=seqa(0,1,T.nirf);
for i (1,9,1);
plotlayout(3,3,i);
plotSetTitle(&myPlot,Names[i]);
temp=arraytomat(T.irf[_shock,.,i])~arraytomat(T1.irf[_shock,.,i]);
plotxy(myPlot,te,temp);
endfor;``````

_shock can take the values 1 and 2. How can I complete or adapt the loop so that the code runs over both values of _schock, so that the plots are created twice, so to speak? Thanks in advance

0

If I am understanding you correctly, I think this will do what you want:

``````_all_shocks= {1, 2};

Names=MakeStrMat(9,1);
Names[1]="Capital Stock";
Names[2]="Growth";
Names[3]="Output";
Names[4]="Taxable income";
Names[5]="Consumption";
Names[6]="Investment";
Names[7]="Hours worked";
Names[8]="Real wages";
Names[9]="Rent rate of capital";

Legend=MakeStrMat(2,1);
Legend[1]="Variable marginal tax rate";
Legend[2]="Constant marginal tax rate";

struct plotControl myPlot;
myPlot=plotGetDefaults("XY");

plotSetLegend(&myPlot,Legend);

for j(1, rows(all_shocks), 1);
_shock = all_shocks[j];

// Open new graph window for
// each shock
plotOpenWindow();

te=seqa(0,1,T.nirf);

for i (1,9,1);
plotlayout(3,3,i);
plotSetTitle(&myPlot,Names[i]);
temp=arraytomat(T.irf[_shock,.,i])~arraytomat(T1.irf[_shock,.,i]);
plotxy(myPlot,te,temp);
endfor;

endfor;``````

### Have a Specific Question?

Get a real answer from a real person

### Need Support?

Get help from our friendly experts.