Thanks to Jack's support in my other question, I was able to solve this one. The Gretl function "replace" provides the "lookup" functionality needed here. The following function "lowlim" does the job

<hansl>

function series lowlim(series X)  # X is the name of the series that exist in the sample - to be inserted in three places in the script
    matrix a = values(X)
    scalar rdim = rows(a)
    matrix b = zeros(rdim,1)
    loop j=2..rdim  --quiet   
    b[j,1]= a[j-1,1]
endloop
matrix b[1,1]= 0.1   # this value must be set by the user depending on each specific situation
    return replace(X, a[,1], b[,1])
end function

series Y = lowlim(X)

</hansl>

When called, the function creates a series, here Y, where Y(i) = the immediately smaller value in the support of X from the value in X(i)

Thanks again.

Alecos Papadopoulos PhD
Athens University of Economics and Business
web: alecospapadopoulos.wordpress.com/


-------- Forwarded Message --------
Subject: Re: a head scratcher
Date: Sat, 21 Sep 2019 21:51:19 +0300
From: Alecos Papadopoulos <papadopalex@aueb.gr>
To: gretl-users@gretlml.univpm.it


[Allin] : <<I'm not sure what you mean by "the immediately smaller value".>>

Assume I have a discrete series X of size n= 5 as follows : x(1) = 5, x(2) = -3, x(3)= 2, x(4) = 2, x(5) =5.

The range of the variable is discrete, X in {-3, 2, 5}.

Then the Y variable series I need would be

y(1) = 2 (because in the range of X, the immediately smaller value from 3, which is the value of x(1), is 2)

y(2) = Since x(2) has the minimum value in the range of X, the value of y(2) should be set/fixed a priori.

y(3) = -3 (because in the range of X, the immediately smaller value from 2, which is the value of x(3), is -3)

y(4) = -3 (because in the range of X, the immediately smaller value from 2, which is the value of x(4),  is -3)

y(5) = 2 (because in the range of X, the immediately smaller value from 5, which is the value of x(5),  is 2)

The comparison/relation  is not with previous values of X along the index of the series, but it is related to the unique values in the range of X.

Why do I want the Y-series ? Because I have a likelihood where at each observation (i), an integral must be evaluated with upper limit x(i) and lower limit y(i). The X series is part of the sample. The Y series must be created.

Conceptually it requires a "lookup" action: we take the value of x(i), we lookup the unique values in the range of X, we choose the "immediately smaller" value in there, and we set it as the value of y(i). If we find that the value of x(i) is the smallest value in the range of X, we have set a priori a given value to be taken by y(i).


Initial message

2) I was unable to determine the combination of Gretl commands that will give me the following:

Let X be a series, X(i), i=1,...,n. I want to create the following series

Y(i) = "the immediately smaller value than X(i) in the X series".

(If the Y series is created using a loop, I guess I can deal with what happens when X(i) is the minimum value in the series by an "if" command)

E.g. if the X series has unique values {-3,  -1,     5,   17}, then X(i) = 5 => Y(i) = -1, X(j) = -1 => Y(j) = -3,   etc. I would much appreciate any ideas.

-- 
Alecos Papadopoulos PhD
Athens University of Economics and Business
web: alecospapadopoulos.wordpress.com/
cell:+30-6945-378680
skype:alecos.papadopoulos