使用 using 语句在 Stata 程序中拆分或标记化?

Split or tokenize within Stata program with using statement?

我正在尝试使用一个程序来加速重复性 Stata 任务。这是我的程序的第一部分:

program alphaoj 

syntax [varlist]  , using(string) occ_level(integer) ind_level(integer)


    import excel `using', firstrow
    display "`using'"
    split "`using'", parse(_)
    
    local year = `2'
    display "`year'"
    display `year'

当我 运行 这个程序时,使用行 alphaoj, ind_level(4) occ_level(5) using("nat4d_2002_dl.xls"),我收到错误 factor-variable and time-series operators not allowed r(101);

我不太确定什么被视为因子或时间序列运算符。

我已经用 tokenize 替换了分割线,用 parse("_") 替换了 parse 语句,我继续 运行 出错。在那种情况下,它说 _ not found r(111);

理想情况下,我会从文件名中获取年份并将该年份用作本地年份。

我正在纠结如何执行这个看似简单的任务。

返回错误,因为split命令只接受字符串变量。您不能将字符串直接传递给它。有关详细信息,请参阅 help split

您可以实现从文件名中提取年份并将其存储为本地宏的目标。见下文:

program alphaoj 
    syntax [varlist], using(string)

    import excel `using', firstrow
    
    gen stringvar = "`using'"

    split stringvar, parse(_)
    
    local year = stringvar2
    display `year'
end

alphaoj, using("nat4d_2002_dl.xls")

最后一行将“2002”打印到控制台。

避免创建额外变量的替代解决方案:

program alphaoj 
    syntax [varlist], using(string)

    import excel `using', firstrow
    
    local year = substr("`using'",7,4)
    
    di `year'
end

alphaoj, using("nat4d_2002_dl.xls")

请注意,此解决方案依赖于 Excel 个具有完全相同字符结构的文件。