【问题标题】:Split or tokenize within Stata program with using statement?使用 using 语句在 Stata 程序中拆分或标记?
【发布时间】:2021-06-10 09:45:56
【问题描述】:

我正在尝试使用一个程序来加速重复的 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);

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

我正在为如何执行这个看似简单的任务而苦恼。

【问题讨论】:

    标签: parsing stata


    【解决方案1】:

    返回错误是因为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 文件。

    【讨论】:

    • 谢谢!我不想存储变量。我觉得它效率低下。您的回答虽然有效 - 我希望有一个更有效的解决方案。
    • 它也让我觉得效率低下。可能有更好的方法,但大概不必依赖split 命令。
    • 同意 - 我完全不喜欢 split 命令,并且很乐意听到其他选择。
    • 我已经为我的答案添加了一个解决方案,它使用substr 函数代替。
    • 就是这个,谢谢!!我应该考虑使用子字符串。
    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2018-04-04
    • 2013-09-06
    • 2011-05-08
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多