如何将存储在本地宏中的值从字符串更改为数字?

How can I change the value stored in local macro from string to numeric?

我想根据存储在 "$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);

我知道会发生这种情况,因为存储的宏是一个字符串。

如何将本地宏中存储的值从字符串更改为数字?

如果你加上=,那么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只是一个字符串,而不是字符串类型的数字!参见

. local date substr("$S_DATE",8,.)

. display `"`date'"'
substr("14 May 2015",8,.)

混淆是因为 display 会为您评估。实际上,

display `date'

扩展到

display substr("14 May 2015",8,.)

后者导致

2015