Chapter 10. Gretl data types
80
expects a positive integer argument and can be used to create an array of pre-given size; in this
case the elements are initialized appropriately as empty strings, null matrices, or empty bundles
or lists. The defarray() function takes a variable number of arguments (one or more), each of
which may be the name of a variable of the appropriate type or an expression which evaluates to
an object of the appropriate type.
Setting and getting elements
There are two ways to set the value of an array element: you can set a particular element using the
array index, or you can append an element using the += operator:
# first case
strings S = array(3)
S[2] = "string the second"
# alternative
matrices M = null
M += mnormal(T,k)
In the first method the index must (of course) be within bounds; that is, greater than zero and
no greater than the current length of the array. When the second method is used it automatically
extends the length of the array by 1.
To get hold of an element, the array indexmust be used:
# for S an array of strings
string s = S[5]
# for M an array of matrices
printf "\n%#12.5\n", M[1]
Operations on whole arrays
At present only one operation is available for arrays as a whole, namely appending. You can do, for
example
# for S1 and S2 both arrays of strings
strings BigS = S1 + S2
# or
S1 += S2
In each case the result is an array of strings whose length is the sum of the lengths of S1 and
S2—and similarly for the other supported types.
Arrays as function arguments
One can write hansl functions that take as arguments any of the array types; in addition arrays can
be passed to function in “pointerized” form.3 In addition hansl functions may return any of the
array types. Here is a trivial example for strings:
function void printstrings (strings *S)
loop i=1..nelem(S) -q
printf "element %d: ’%s’\n", i, S[i]
endloop
end function
function strings mkstrs (int n)
3
With theexception of anarray oflists. Our thinking on howexactly tohandle arraysof lists asfunction arguments
isnotyetvery faradvanced.
Convert pdf back to powerpoint - software application cloud:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Convert pdf back to powerpoint - software application cloud:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
Chapter 10. Gretl data types
81
strings S = array(n)
loop i=1..n -q
S[i] = sprintf("member %d", i)
endloop
return S
end function
strings Foo = mkstrs(5)
print Foo
printstrings(&Foo)
Acouple of points are worth noting here. First, the nelem() function works to give the number of
elements in any of the “container” types (lists, arrays, bundles, matrices). Second, if you do “print
Foo” for Foo an array, you’ll see something like:
? print Foo
Array of strings, length 5
Arrays and bundles
As mentioned, the bundle type is supported by the array mechanism. In addition, arrays (of what-
ever type) can be put into bundles:
matrices M = array(8)
# set values of M[i] here...
bundle b
b.M = M
The mutual “packability” of bundles and arrays means that it’s possible to go quite far down the
rabbit-hole... users are advised not to get carried away.
10.9 The life cycle of gretl objects
Creation
The most basic way to create a new variable of any type is by declaration, where one states the type
followedby the name of the variable to create, as in
scalar x
series y
matrix A
and so forth. In that case the object in question is given a default initialization, as follows: a new
scalar has value NA (missing); a new series is filled with NAs; a new matrix is null (zero rows and
columns); a new string is empty; a new list has no members, and a new bundle is empty.
Declaration can be supplemented by a definite initialization, as in
scalar x = pi
series y = log(x)
matrix A = zeros(10,4)
The traditional way of creating a new variable in gretl was via the genr command (which is still
supported), as in
genr x = y/100
software application cloud:How to C#: Set Image Thumbnail in C#.NET
PDF, C#.NET convert PDF to svg, C#.NET convert PDF to text, C#.NET convert PDF to images VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET Back Color.
www.rasteredge.com
software application cloud:VB.NET Word: Word Conversion SDK for Changing Word Document into
completed. To convert PDF back to Word document in VB.NET, please refer to this page: VB.NET Imaging - Convert PDF to Word Using VB.
www.rasteredge.com
Chapter 10. Gretl data types
82
Here the type ofx is left implicit andwill be determined automatically depending on the context: if
yis a scalar, a series or a matrix x will inherit y’s type (otherwise an error will be generated, since
division is applicable to these types only). Moreover, the type of a new variable can be left implicit
without use of genr:
4
x = y/100
In “modern” gretl scripting we recommend that you state the type of a new variable explicitly.
This makes the intent clearer to a reader of the script and also guards against errors that might
otherwise be difficult to understand (i.e. a certain variable turns out to be of the wrong type for
some subsequent calculation, but you don’t notice at first because you didn’t say what type you
needed). An exception to this rule might reasonably be granted for clear and simple cases where
there’s little possibility of confusion.
Modification
Typically, the values of variables ofall types are modifiedby assignment, using the = operator with
the name of the variable on the left and a suitable value or formula on the right:
z = normal()
x = 100 * log(y) - log(y(-1))
M = qform(a, X)
By a “suitable” value we mean one that is conformable for the type in question. A gretl variable
acquires its type when it is first created and this cannot be changed via assignment; for example, if
you have a matrix A and later want a string A, you will have to delete the matrix first.
+
Onepoint towatch out for in gretl scripting is typeconflicts having todowith the names ofseries brought
in from a data file. For example, in setting up a command loop (see chapter 12) it is very common to call
the loop index i. Now a loop index is a scalar (typically incremented each time round the loop). If you open
adata file that happens to contain a series named i you will get a type error (“Types not conformable for
operation”) when you try to use i as a loop index.
Although the type of an existing variable cannot be changed on the fly, gretl nonetheless tries to be
as “understanding” as possible. For example if x is a series and you say
x = 100
gretl will give the series a constant value of 100 rather than complaining that you are trying to
assign a scalar to a series. This issue is particularly relevant for the matrix type—see chapter15
for details.
Besides using the regular assignment operator you also have the option of using an “inflected”
equals sign, as in the C programming language. This is shorthand for the case where the new value
of the variable is a function of the old value. For example,
x += 100 # in longhand: x = x + 100
x *= 100 # in longhand: x = x * 100
For scalar variables you can use a more condensed shorthand for simple increment or decrement
by 1, namely trailing ++ or -- respectively:
x = 100
x--
# x now equals 99
x++
# x now equals 100
4
Apartfrom the bundle type: that mustalwaysbe specified.
software application cloud:C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
control, RasterEdge XDoc.PDF, is a 100% clean .NET solution for C# developers to permanently rotate PDF document page and save rotated PDF document back or as
www.rasteredge.com
software application cloud:C# Image: Tutorial for Collaborating, Marking & Annotating
Besides, more annotations can be drawn and saved back to the database We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 10. Gretl data types
83
In the case of objects holding more than one value—series, matrices and bundles—you can mod-
ify particular values within the object using an expression within square brackets to identify the
elements to access. We have discussed this above for the bundle type and chapter 15 goes into
details for matrices. As for series, there are two ways to specify particular values for modification:
you can use a simple 1-based index, or if the dataset is a time series or panel (or if it has marker
strings that identify the observations) you can use an appropriate observation string. Such strings
are displayed by gretl when you print data with the --byobs flag. Examples:
x[13]
= 100
# simple index: the 13th observation
x[1995:4]
= 100
# date: quarterly time series
x[2003:08] = 100
# date: monthly time series
x["AZ"]
= 100
# the observation with marker string "AZ"
x[3:15]
= 100
# panel: the 15th observation for the 3rd unit
Note that with quarterly or monthly time series there is no ambiguity between a simple index
number and a date, since dates always contain a colon. With annual time-series data, however,
such ambiguity exists and it is resolved by the rule that a number in brackets is always read as a
simple index: x[1905] means the nineteen-hundred and fifth observation, not the observation for
the year 1905. You can specify a year by quotation, as in x["1905"].
Destruction
Objects of the types discussedabove, with the important exception of named lists, are all destroyed
using the delete command: delete objectname.
Lists are an exception for this reason: in the context of gretl commands, a named list expands to
the ID numbers of the member series, so if you say
delete L
for L a list, the effect is to delete all the series in L; the list itself is not destroyed, but ends up
empty. To delete the list itself (without deleting the member series) you must invert the command
and use the list keyword:
list L delete
software application cloud:C# TIFF: Merge and Split TIFF File(s) with C# Programming
C#.NET Demo Code for Merging & Splitting TIFF File(s). // split TIFF document into 2 parts and save them back to disk TIFFDocument.SplitDocument(sourceFilePath
www.rasteredge.com
software application cloud:RasterEdge Product Refund Policy
the first step for you is to sign and send back RasterEdge Software We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 11
Discrete variables
When a variable can take only a finite, typically small, number of values, then it issaidto be discrete.
In gretl,variables of the series type (only) can be marked asdiscrete. (When we speak of“variables”
below this should be understood as referring to series.) Some gretl commands act in a slightly
different way when applied to discrete variables; moreover, gretl provides a few commands that
only apply to discrete variables. Specifically, the dummify and xtab commands (see below) are
available only for discrete variables, while the freq (frequency distribution) command produces
different output for discrete variables.
11.1 Declaring variables as discrete
Gretl uses a simple heuristic to judge whether a given variable should be treated as discrete, but
you also have the option of explicitly marking a variable as discrete, in which case the heuristic
check is bypassed.
The heuristic is as follows: First, are all the values of the variable “reasonably round”, where this
is taken to mean that they are all integer multiples of 0.25? If this criterion is met, we then ask
whether the variable takes on a “fairly small” set of distinct values, where “fairly small” is defined
as less than or equal to 8. If both conditions are satisfied, the variable is automatically considered
discrete.
To mark a variable as discrete you have two options.
1. From the graphical interface, select “Variable, Edit Attributes” from the menu. A dialog box
will appear and, if the variable seems suitable, you will see a tick box labeled “Treat this
variable as discrete”. This dialog box can also be invoked via the context menu (right-click on
avariable) or by pressing the F2 key.
2. From the command-line interface, via the discrete command. The command takes one or
more arguments, which can be either variables or list of variables. For example:
list xlist = x1 x2 x3
discrete z1 xlist z2
This syntax makes it possible to declare as discrete many variables at once, which cannot
presently be done via the graphical interface. The switch --reverse reverses the declaration
of a variable as discrete, or in other words marks it as continuous. For example:
discrete foo
# now foo is discrete
discrete foo --reverse
# now foo is continuous
The command-line variant is more powerful, in that you can mark a variable as discrete even if it
does not seem to be suitable for this treatment.
Note that marking a variable as discrete does not affect its content. It is the user’s responsibility
to make sure that marking a variable as discrete is a sensible thing to do. Note that if you want to
recode a continuous variable into classes, you can use gretl’s arithmetical functionality, as in the
following example:
84
software application cloud:C# PDF: Start to Create, Load and Save PDF Document
can use PDFDocument object to do bulk operations like load, save, convert images/document to page in the document), you can save it back to a PDF file or
www.rasteredge.com
software application cloud:C# Imaging - Linear ITF-14 Barcode Generator
Y to control barcode image area on PDF, TIFF, Word 14 barcode image fore and back colors in BarcodeHeight = 200; barcode.AutoResize = true; //convert barcode to
www.rasteredge.com
Chapter 11. Discrete variables
85
nulldata 100
# generate a series with mean 2 and variance 1
series x = normal() + 2
# split into 4 classes
series z = (x>0) + (x>2) + (x>4)
# now declare z as discrete
discrete z
Once a variable is marked as discrete, this setting is remembered when you save the data file.
11.2 Commands for discrete variables
The dummify command
The dummify command takesas argument a series x and creates dummy variables for each distinct
value present in x, which must have already been declared as discrete. Example:
open greene22_2
discrete Z5 # mark Z5 as discrete
dummify Z5
The effect of the above command is to generate 5 new dummy variables, labeled DZ5_1 through
DZ5_5, which correspond to the different values in Z5. Hence, the variable DZ5_4 is 1 if Z5 equals
4and 0 otherwise. This functionality is also available through the graphical interface by selecting
the menu item “Add, Dummies for selected discrete variables”.
The dummify command can also be used with the following syntax:
list dlist = dummify(x)
This not only creates the dummy variables, but also a namedlist (see section14.1) that can be used
afterwards. The following example computes summary statistics for the variable Y for each value
of Z5:
open greene22_2
discrete Z5 # mark Z5 as discrete
list foo = dummify(Z5)
loop foreach i foo
smpl $i --restrict --replace
summary Y
endloop
smpl --full
Since dummify generates a list, it can be used directly in commandsthat call for a list as input, such
as ols. For example:
open greene22_2
discrete Z5 # mark Z5 as discrete
ols Y 0 dummify(Z5)
The freq command
The freq command displays absolute and relative frequencies for a given variable. The way fre-
quencies are counted depends on whether the variable is continuous or discrete. This command is
also available via the graphical interface by selecting the “Variable, Frequency distribution” menu
entry.
software application cloud:How to C#: Create a Winforms Control
pages, VB.NET comment annotate PDF, VB.NET delete PDF pages, VB.NET convert PDF to SVG. VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET Back Color.
www.rasteredge.com
software application cloud:VB.NET Image: VB.NET Codes to Add Antique Effect to Image with .
a touch of history to the image which can help bring back the sweet We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 11. Discrete variables
86
For discrete variables, frequencies are counted for each distinct value that the variable takes. For
continuous variables, values are grouped into “bins” andthen the frequencies are counted for each
bin. The number of bins, by default, is computed asa function of the number of valid observations
in the currently selected sample via the rule shown in Table11.1. However, when the command is
invoked through the menu item “Variable, Frequency Plot”, this default can be overridden by the
user.
Observations
Bins
8n <16
5
16 n <50
7
50 n 850
d
p
ne
n> 850
29
Table 11.1: Number of bins forvarious sample sizes
For example, the following code
open greene19_1
freq TUCE
discrete TUCE # mark TUCE as discrete
freq TUCE
yields
Read datafile /usr/local/share/gretl/data/greene/greene19_1.gdt
periodicity: 1, maxobs: 32,
observations range: 1-32
Listing 5 variables:
0) const
1) GPA
2) TUCE
3) PSI
4) GRADE
? freq TUCE
Frequency distribution for TUCE, obs 1-32
number of bins = 7, mean = 21.9375, sd = 3.90151
interval
midpt
frequency
rel.
cum.
<
13.417
12.000
1
3.12%
3.12% *
13.417 - 16.250
14.833
1
3.12%
6.25% *
16.250 - 19.083
17.667
6
18.75%
25.00% ******
19.083 - 21.917
20.500
6
18.75%
43.75% ******
21.917 - 24.750
23.333
9
28.12%
71.88% **********
24.750 - 27.583
26.167
7
21.88%
93.75% *******
>= 27.583
29.000
2
6.25% 100.00% **
Test for null hypothesis of normal distribution:
Chi-square(2) = 1.872 with p-value 0.39211
? discrete TUCE # mark TUCE as discrete
? freq TUCE
Frequency distribution for TUCE, obs 1-32
frequency
rel.
cum.
12
1
3.12%
3.12% *
14
1
3.12%
6.25% *
17
3
9.38%
15.62% ***
Chapter 11. Discrete variables
87
19
3
9.38%
25.00% ***
20
2
6.25%
31.25% **
21
4
12.50%
43.75% ****
22
2
6.25%
50.00% **
23
4
12.50%
62.50% ****
24
3
9.38%
71.88% ***
25
4
12.50%
84.38% ****
26
2
6.25%
90.62% **
27
1
3.12%
93.75% *
28
1
3.12%
96.88% *
29
1
3.12%
100.00% *
Test for null hypothesis of normal distribution:
Chi-square(2) = 1.872 with p-value 0.39211
As can be seen from the sample output, a Doornik–Hansen test for normality is computed auto-
matically. This test is suppressed for discrete variables where the number of distinct values is less
than 10.
This command accepts two options: --quiet, to avoid generation of the histogram when invoked
from the command line and --gamma, for replacing the normality test with Locke’s nonparametric
test, whose null hypothesis is that the data followa Gamma distribution.
If the distinct values ofa discrete variable need to be saved, the values() matrix construct can be
used (see chapter15).
The xtab command
The xtab command cab be invoked in either of the following ways. First,
xtab ylist ; xlist
where ylist and xlist are lists of discrete variables. This produces cross-tabulations (two-way
frequencies) of each of the variables in ylist (by row) against each of the variables in xlist (by
column). Or second,
xtab xlist
In the secondcase a full set ofcross-tabulationsis generated; that is, each variable in xlist is tabu-
lated against each other variable in the list. In the graphical interface, this commandis represented
by the “Cross Tabulation” item under the View menu, which is active if at least two variables are
selected.
Here is an example ofuse:
open greene22_2
discrete Z* # mark Z1-Z8 as discrete
xtab Z1 Z4 ; Z5 Z6
which produces
Cross-tabulation of Z1 (rows) against Z5 (columns)
[
1][
2][
3][
4][
5]
TOT.
[
0]
20
91
75
93
36
315
[
1]
28
73
54
97
34
286
TOTAL
48
164
129
190
70
601
Chapter 11. Discrete variables
88
Pearson chi-square test = 5.48233 (4 df, p-value = 0.241287)
Cross-tabulation of Z1 (rows) against Z6 (columns)
[
9][
12][
14][
16][
17][
18][
20]
TOT.
[
0]
4
36
106
70
52
45
2
315
[
1]
3
8
48
45
37
67
78
286
TOTAL
7
44
154
115
89
112
80
601
Pearson chi-square test = 123.177 (6 df, p-value = 3.50375e-24)
Cross-tabulation of Z4 (rows) against Z5 (columns)
[
1][
2][
3][
4][
5]
TOT.
[
0]
17
60
35
45
14
171
[
1]
31
104
94
145
56
430
TOTAL
48
164
129
190
70
601
Pearson chi-square test = 11.1615 (4 df, p-value = 0.0248074)
Cross-tabulation of Z4 (rows) against Z6 (columns)
[
9][
12][
14][
16][
17][
18][
20]
TOT.
[
0]
1
8
39
47
30
32
14
171
[
1]
6
36
115
68
59
80
66
430
TOTAL
7
44
154
115
89
112
80
601
Pearson chi-square test = 18.3426 (6 df, p-value = 0.0054306)
Pearson’s 
2
test for independence is automatically displayed,provided that all cells have expected
frequencies under independence greater than 10
7
.However, a common rule of thumb states that
this statistic is valid only if the expected frequency is 5 or greater for at least 80 percent of the
cells. If this condition is not met a warning is printed.
Additionally, the --row or --column options can be given: in this case, the output displays row or
column percentages, respectively.
If you want to cut and paste the output of xtab to some other program, e.g. a spreadsheet, you
may want to use the --zeros option; this option causes cells with zero frequency to display the
number 0 insteadof being empty.
Chapter 12
Loop constructs
12.1 Introduction
The command loop opens a special mode in which gretl accepts a block of commands to be re-
peated zero or more times. This feature may be useful for, among other things, Monte Carlo
simulations, bootstrapping of test statistics and iterative estimation procedures. The general form
of a loop is:
loop control-expression [ --progressive | --verbose | --quiet ]
loop body
endloop
Five forms of control-expression are available, as explained in section12.2.
Not all gretl commands are available within loops. The commands that are not presently accepted
in this context are shown in Table12.1.
Table 12.1: Commands not usable in loops
function
include nulldata
run
setmiss
By default, the genr command operates quietly in the context of a loop (without printing informa-
tion on the variable generated). To force the printing of feedback from genr you may specify the
--verbose option to loop. The --quiet option suppresses the usual printout of the number of
iterations performed, which may be desirable when loops are nested.
The --progressive option to loop modifies the behavior of the commands print and store,
and certain estimation commands, in a manner that may be useful with Monte Carlo analyses (see
Section12.3).
The following sections explain the various forms of the loop control expression and provide some
examples of use of loops.
+
If you are carrying out a substantial Monte Carlo analysis with many thousands of repetitions, memory
capacity and processing time may be an issue. To minimize the use of computer resources, run your script
using the command-line program, gretlcli, with output redirected toa file.
12.2 Loop control variants
Count loop
The simplest form of loop control is a direct specification of the number of times the loop should
be repeated. We refer to this as a “count loop”. The number of repetitions may be a numerical
constant, as in loop 1000, or may be read from a scalar variable, as in loop replics.
In the case where the loop count is given by a variable, say replics, in concept replics is an
integer; if the value is not integral, it is converted to an integer by truncation. Note that replics is
evaluated only once, when the loop is initially compiled.
89
Documents you may be interested
Documents you may be interested