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

Parsing 使用using语句在Stata程序内拆分或标记化?,parsing,stata,Parsing,Stata,我试图用一个程序来加速重复的Stata任务。这是我计划的第一部分: program alphaoj syntax [varlist] , using(string) occ_level(integer) ind_level(integer) import excel `using', firstrow display "`using'" split "`using'", parse(_) local ye

我试图用一个程序来加速重复的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)使用(“nat4d_2002_dl.xls”)
,我收到错误
因子变量和不允许的时间序列运算符r(101)

我不太清楚什么被视为因子或时间序列运算符

我用tokenize替换了split行,用parse(“\”)替换了parse语句,我继续遇到错误。在这种情况下,它表示未找到r(111)

理想情况下,我会让它从文件名中选取一年,并将该年用作本地


我正在努力解决如何执行这项看似简单的任务。

返回一个错误,因为
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
命令仅接受字符串变量。不能将字符串直接传递给它。有关详细信息,请参阅帮助拆分

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

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
函数。就是这个,谢谢!!我应该考虑使用子字符串。谢谢!但我不想存储变量。我觉得它效率低下。不过你的答案是有效的——我希望有一个更有效的解决方案。我觉得这也是低效的。可能有更好的方法,但可能它不需要依赖于
split
命令。同意-我根本不喜欢split命令,我很乐意听到其他选择。我在我的答案中添加了一个解决方案,使用
substr
函数。就是这个,谢谢!!我应该考虑使用子字符串。