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”))
从当前系统日期开始生成当前年份的数值。