Два ключевых момента:
Скаляры скаляры и макросы макросы. Но скаляр может иметь временное имя, в котором вы можете запутаться.
Макросы строго строковые. Числовые скаляры могут содержать только числа. (Также имеются строковые скаляры.)
. mata : st_numscalar("frog", 42)
. di frog
42
Это скаляр с постоянным именем. Но будьте осторожны: если бы у вас была переменная, называемая frog
, эта интерпретация превзошла бы интерпретацию scalar
.
. tempname toad
. mata : st_numscalar("`toad'", 24)
. di `toad'
24
Это скаляр с временным названием.
. mata : st_local("newt", "1000")
. di `newt'
1000
Это местный макрос, который содержит строку "1000"
.
Вы можете делать такие вещи.
. di `newt' + `toad'
1024
Но это потому, что здесь происходят две вещи. Stata сначала интерпретирует ссылки на локальный макрос и скаляр и заменяет их содержимое. Таким образом, display
затем видит
. di 1000 + 24
и составляет расчет. Но вы можете настаивать на строковой интерпретации.
. di "`newt'`toad'"
1000__000000
, который подчеркивает, что вам необходимо постоянно держать различие между именем чего-то и его содержимым. Здесь строка
"`toad'"
- имя скаляра, которое является временным названием.
Также рассмотреть это:
. local anothernewt = 1000
. di `anothernewt'
1000
. di "`anothernewt'"
1000
Stata позволяет указать числовой интерпретации или интерпретации строки. Конечно, результаты выглядят одинаково, но в принципе они разные. Вопрос в том, что это вас укусит (не в этом примере).
Итак, проблема в том, что я использую одинарные кавычки на стороне Stata? – Alexis
Правильно: в первом примере вы ссылались на 'собаку, как на временное имя, но это не так. –