我想生成一个滞后年份的变量,具体取决于"$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);
我知道这是因为存储的宏是一个字符串。
如何将存储在本地宏中的值从字符串更改为数字?
答案 0 :(得分:2)
如果您添加=
,那么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