|
Size: 1966
Comment:
|
Size: 5580
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 2: | Line 2: |
Stata supports a '''macro''' programming language. |
|
| Line 71: | Line 73: |
| {{{ local cohorttype: type cohort if (strpos("`cohorttype'","str")>0) { destring cohort, replace } }}} ||'''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` || || Note that the `e()`, `r()`, and `s()` functions expect an argument of `scalars`, `macros`, `matrices`, or `functions`. |
|
| Line 73: | Line 140: |
| properties | |
| Line 75: | Line 141: |
| results | === Lists === |
| Line 77: | Line 143: |
| type | The `list` macro function enables a domain-specific language based on sets. |
| Line 79: | Line 145: |
| format | {{{ 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 81: | Line 151: |
| value label | 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 83: | Line 153: |
| variable label | The `list` macro function also features sub-functions including: |
| Line 85: | Line 155: |
| data label | {{{ local unique: list uniq nonunique local duplciates: list dupes nonunique local sorted: list sort unsorted local length: list sizeof series }}} |
| Line 87: | Line 162: |
| sortedby | It is furthermore possible to test and compare lists. |
| Line 89: | Line 164: |
| label | {{{ local match: list a == b local match: list a === b }}} |
| Line 91: | Line 169: |
| constraint | 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 93: | Line 171: |
| char | {{{ local match: list needle in haystack local match: list posof "needle" in haystack }}} |
| Line 95: | Line 176: |
| permname | 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 97: | Line 178: |
| adosubdir | ---- |
| Line 99: | Line 180: |
| dir | |
| Line 101: | Line 181: |
| sysdir | |
| Line 103: | Line 182: |
| environment | == See also == |
| Line 105: | Line 184: |
| e() | [[https://www.stata.com/manuals/pmacro.pdf|Stata manual for macros]] |
| Line 107: | Line 186: |
| r() | |
| Line 109: | Line 187: |
| s() all globals all scalars 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.
