Types 如何将本地宏中存储的值从字符串更改为数字?
我想根据Types 如何将本地宏中存储的值从字符串更改为数字?,types,global,stata,local,stata-macros,Types,Global,Stata,Local,Stata Macros,我想根据“$S_DATE”宏中存储的年份生成一个带有滞后年份的变量。我已将年份存储在名为date的宏中: . local date substr("$S_DATE",8,.) . display `date' 2015 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
“$S_DATE”
宏中存储的年份生成一个带有滞后年份的变量。我已将年份存储在名为date
的宏中:
. local date substr("$S_DATE",8,.)
. display `date'
2015
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
我想用以下公式生成新变量:
gen start_year =`date'- y_passed
其中,y\u passed
是一个包含1到10的整数的变量
然而,我得到:
. gen start_year = `date' - y_passed
type mismatch
r(109);
我知道会发生这种情况,因为存储的宏是字符串
如何将本地宏中存储的值从字符串更改为数字?如果添加
=
,则Stata将计算定义本地日期的表达式:
. local date substr("$S_DATE",8,.)
. display `date'
2015
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
在这种情况下,yofd(daily($S_DATE,“$DMY”))
从当前系统日期开始生成当前年份的数值。