Hi Yi-Nung Yang and Sven,

Thanks for your reply.
@Yi-Nung Yang
Your suggestion works fine. Thank you for it.

@Sven
I will try out your suggestion. It seems to be the more elegant way. ;-)

Cheers,
Artur

P.S.: For those who are interested in the function:
Creates:
1. Separated series of positive and negative changes of the variable(s) 
of interest.
2. 'Regime series' or separated partial sum processes [cumulation of all 
positive (negative) changes] of the variable(s) of interest.
------------------------------------------------
function list Regime_Series (list Y "List of variables")
   smpl --full

   list olist = null         #Output list

   loop foreach i Y --quiet
     series pd_d_$i = 0     #Generate series for positive changes
     series nd_d_$i = 0     #Generate series for negative changes
   endloop

   list dY = diff(Y)         #1st difference of Y

   #Attribute the first differences to the series
   loop foreach i dY --quiet
     smpl $i > 0 --restrict #Restrict only positive changes
     pd_$i = $i             #Generate series of positive changes
     smpl --full
     smpl $i < 0 --restrict #Restrict only negative changes
     nd_$i = $i             #Generate series of negative changes
     smpl --full
     setinfo pd_$i -d "Positive values of $i"
     setinfo nd_$i -d "Negative values of $i"
     #------------- add pd_$i nd_$i to olist
     olist += pd_$i nd_$i
   endloop

   #Create partial sum process
   loop foreach i Y --quiet
     series $i_p = 0
     series $i_n = 0
     series $i_p = $i_p(-1) + pd_d_$i #Partial sum process of positive 
changes
     setinfo $i_p -d "Positive partial sum of $i"
     series $i_n = $i_n(-1) + nd_d_$i #Partial sum process of negative 
changes
     setinfo $i_n -d "Negative partial sum of $i"
     # ---------- add $i_p $i_m to olist
     olist += $i_p $i_n
   endloop

   # ------- return
   return olist
end function
------------------------------------------------

Am 12.05.2010 10:00, schrieb Sven Schreiber:
> Artur T. schrieb:
>
>    
>>     # create partial sum process
>>     loop foreach i Y --quiet
>>       series $i_p = 0
>>       series $i_m = 0
>>       series $i_p = $i_p(-1) + pd_d_$i #Partial sum process of positive
>> changes
>>       series $i_m = $i_m(-1) + nd_d_$i #Partial sum process of negative
>>      
> unrelated to your question: the cum() function may be helpful here
>
>    
>> I would like to add the series $i_p and $i_m to the current variables
>> but I cannot find out how to use the "return" command correctly in this
>> context. Does anybody have a suggestion?
>>      
> If the number of returned series is known in advance and small, you
> might also try the pointer variant:
>
> function void getoutput(series *out1, series *out2)
> ...
> end function
>
> series output1=0
> series output2=0
> getoutput(&output1,&output2)
>
> The advantage is that the names of the returned series are controlled
> not by the function code, but by the calling code.
>
> HTH,
> sven
> _______________________________________________
> Gretl-users mailing list
> Gretl-users(a)lists.wfu.edu
> http://lists.wfu.edu/mailman/listinfo/gretl-users
>    

Reply via email to