Как я могу изменить значение, хранящееся в локальном макросе со строкового на числовое?
Я хочу создать переменную с запаздывающим годом в зависимости от года, сохраненного в "$S_DATE"
макро. Я сохранил год в макросе date
:
. local date substr("$S_DATE",8,.)
. display `date'
2015
И я хочу сгенерировать новую переменную с:
gen start_year =`date'- y_passed
где y_passed
переменная, содержащая целые числа от 1 до 10.
Тем не менее, я получаю:
. gen start_year = `date' - y_passed
type mismatch
r(109);
Я знаю, что это происходит потому, что сохраненный макрос является строкой.
Как я могу изменить значение, хранящееся в локальном макросе со строкового на числовое?
1 ответ
Решение
Если вы добавите =
, тогда Stata оценит выражение, которое определяет локальный date
:
clear
set more off
set obs 10
gen y_passed = _n
local date = substr("$S_DATE",8,.)
display `date'
gen start_year = `date' - y_passed
list
Иначе, локальный просто содержит строку, но не число в строковом типе! Увидеть
. local date substr("$S_DATE",8,.)
. display `"`date'"'
substr("14 May 2015",8,.)
Путаница в том, что display
оценит для вас. В действительности,
display `date'
расширяется до
display substr("14 May 2015",8,.)
и последнее приводит к
2015