0

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

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

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

4

1 回答 1

2

如果添加=,则 Stata 将评估定义 local 的表达式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
于 2015-05-14T19:43:54.493 回答