Как я могу изменить значение, хранящееся в локальном макросе со строкового на числовое?

Я хочу создать переменную с запаздывающим годом в зависимости от года, сохраненного в "$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
Другие вопросы по тегам