Differences between revisions 6 and 9 (spanning 3 versions)
Revision 6 as of 2023-06-08 00:36:59
Size: 2129
Comment:
Revision 9 as of 2023-07-28 21:22:48
Size: 5580
Comment:
Deletions are marked like this. Additions are marked like this.
Line 80: Line 80:
properties ||'''Name''' ||'''Returns''' ||
||`properties` ||properties of a [[Stata/Programs|program]] ||
||`results` ||results class of a [[Stata/Programs|program]] ||
||`type` ||[[Stata/DataTypes|data type]] of a variable ||
||`format` ||[[Stata/DataFormats|data format]] of a variable||
||`value label` || ||
||`variable label` ||label of a variable ||
||`data label` || ||
||`sortedby` || ||
||`label` || ||
||`constraint` || ||
||`char` || ||
||`permname` || ||
||`adosubdir` || ||
||`dir` || ||
||`sysdir` || ||
||`environment` ||name lookup from environment variables ||
||`e()` ||names in [[Stata/StoredResults#E_Class|e()]] ||
||`r()` ||names in [[Stata/StoredResults#R_Class|r()]] ||
||`s()` ||names in [[Stata/StoredResults#S_Class|s()]] ||
||`all globals` ||pattern lookup of global macros ||
||`all scalars` ||pattern lookup of [[Stata/Scalars|scalars]] ||
||`all numeric scalars`||pattern lookup of numeric scalars ||
||`all string scalars` ||pattern lookup of string scalars ||
||`all matrices` ||pattern lookup of [[Stata/Matrices|matrices]] ||
||`display` || ||
||`list` ||see [[#Lists]] below ||
||`rownames` || ||
||`colnames` || ||
||`rowfullnames` || ||
||`colfullnames` || ||
||`roweq` || ||
||`coleq` || ||
||`rownumb` || ||
||`colnumb` || ||
||`roweqnumb` || ||
||`coleqnumb` || ||
||`rownfreeparms` || ||
||`colnfreeparms` || ||
||`rownlfs` || ||
||`colnlfs` || ||
||`rowsof` || ||
||`colsof` || ||
||`rowvarlist` || ||
||`colvarlist` || ||
||`rowlfnames` || ||
||`collfnames` || ||
||`tsnorm` || ||
||`copy local` ||copy a local macro's value ||
||`copy global` ||copy a global macro's value ||
||`word` || ||
||`piece` || ||
||`strlen` || ||
||`ustrlen` || ||
||`udstrlen` || ||
||`subinstr` || ||
Line 82: Line 137:
results Note that the `e()`, `r()`, and `s()` functions expect an argument of `scalars`, `macros`, `matrices`, or `functions`.
Line 84: Line 139:
type
Line 86: Line 140:
format
Line 88: Line 141:
value label === Lists ===
Line 90: Line 143:
variable label The `list` macro function enables a domain-specific language based on sets.
Line 92: Line 145:
data label {{{
local union: list a | b
local intersection: list a & b
local difference: list a - b //To clarify: will *not* include exclusive elements of b
}}}
Line 94: Line 151:
sortedby Note that in each of the above cases, order is preserved. Also note that every references list macro is assumed to be a local macro. To reference a global macro instead, specify it like `global(a)`.
Line 96: Line 153:
label The `list` macro function also features sub-functions including:
Line 98: Line 155:
constraint {{{
local unique: list uniq nonunique
local duplciates: list dupes nonunique
local sorted: list sort unsorted
local length: list sizeof series
}}}
Line 100: Line 162:
char It is furthermore possible to test and compare lists.
Line 102: Line 164:
permname {{{
local match: list a == b
local match: list a === b
}}}
Line 104: Line 169:
adosubdir In the first example, `match` will store `1` if the two lists are equivalent and are in the same order (and `0` otherwise). The second example is order agnostic.
Line 106: Line 171:
dir {{{
local match: list needle in haystack
local match: list posof "needle" in haystack
}}}
Line 108: Line 176:
sysdir In the first example, `needle` is a macro list and `match` will store `1` if all elements of `needle` are found in `haystack`. In the second example, `"needle"` is a value literal and `match` will store the character position where the value begins appearing in `haystack`.
Line 110: Line 178:
environment ----
Line 112: Line 180:
e()
Line 114: Line 181:
r()
Line 116: Line 182:
s() == See also ==
Line 118: Line 184:
all globals [[https://www.stata.com/manuals/pmacro.pdf|Stata manual for macros]]
Line 120: Line 186:
all scalars
Line 122: Line 187:
all matrices

display

list

rownames

colnames

rowfullnames

colfullnames

roweq

coleq

rownumb

colnumb

roweqnumb

coleqnumb

rownfreeparms

colnfreeparms

rownlfs

colnlfs

rowsof

colsof

rowvarlist

colvarlist

rowlfnames

collfnames

tsnorm

copy local

copy global

word

piece

strlen

ustrlen

udstrlen

subinstr

Macros

Stata supports a macro programming language.


Local Macros

Local macros are declared with the local command, and only exist in the local scope.

local stringvars var1 var2

destring `stringvars', force

To loop over words in a local macro, see here.

Note that looping creates local macros to store the current word. These local macros are accessed in the same manner

foreach v of local stringvars {
  destring `v', force
} 


Global Macros

Global macros are declared with the global command. Otherwise, the grammar and rules are exactly the same as local macros.

global COHORT 1

Generally these are discouraged, because their very nature (i.e. globally available) creates side-effects.

To loop over words in a global macro, see here.


Expressions

If a macro definition includes an equals sign (=), then what follows is evaluated as an expression.

. local count1 = _N
. local count2 _N
. display "`count1' vs. `count2'"
100 vs. _N
. display "`count1' vs. " `count2'
100 vs. 100


Functions

If a macro definition includes a colon (:), then what follows is a macro function.

local cohorttype: type cohort
if (strpos("`cohorttype'","str")>0) {
  destring cohort, replace
}

Name

Returns

properties

properties of a program

results

results class of a program

type

data type of a variable

format

data format of a variable

value label

variable label

label of a variable

data label

sortedby

label

constraint

char

permname

adosubdir

dir

sysdir

environment

name lookup from environment variables

e()

names in e()

r()

names in r()

s()

names in s()

all globals

pattern lookup of global macros

all scalars

pattern lookup of scalars

all numeric scalars

pattern lookup of numeric scalars

all string scalars

pattern lookup of string scalars

all matrices

pattern lookup of matrices

display

list

see #Lists below

rownames

colnames

rowfullnames

colfullnames

roweq

coleq

rownumb

colnumb

roweqnumb

coleqnumb

rownfreeparms

colnfreeparms

rownlfs

colnlfs

rowsof

colsof

rowvarlist

colvarlist

rowlfnames

collfnames

tsnorm

copy local

copy a local macro's value

copy global

copy a global macro's value

word

piece

strlen

ustrlen

udstrlen

subinstr

Note that the e(), r(), and s() functions expect an argument of scalars, macros, matrices, or functions.

Lists

The list macro function enables a domain-specific language based on sets.

local union: list a | b
local intersection: list a & b
local difference: list a - b    //To clarify: will *not* include exclusive elements of b

Note that in each of the above cases, order is preserved. Also note that every references list macro is assumed to be a local macro. To reference a global macro instead, specify it like global(a).

The list macro function also features sub-functions including:

local unique: list uniq nonunique
local duplciates: list dupes nonunique
local sorted: list sort unsorted
local length: list sizeof series

It is furthermore possible to test and compare lists.

local match: list a == b
local match: list a === b

In the first example, match will store 1 if the two lists are equivalent and are in the same order (and 0 otherwise). The second example is order agnostic.

local match: list needle in haystack
local match: list posof "needle" in haystack

In the first example, needle is a macro list and match will store 1 if all elements of needle are found in haystack. In the second example, "needle" is a value literal and match will store the character position where the value begins appearing in haystack.


See also

Stata manual for macros


CategoryRicottone

Stata/Macros (last edited 2023-07-28 21:22:48 by DominicRicottone)