Stata中用于区分文件类型(数据集和执行文件)的程序

时间:2017-06-21 17:23:16

标签: if-statement dataset stata

我正在尝试在Stata中编写一个简单的程序,我的学生可以从我的网站下载数据集和示例文件。这个程序被称为" usecda"以下是仅打开数据集的示例。

capture     program drop usecda
program     define usecda
args        data 
use         https://tamaravdd.github.io/icpsrcda/`data', clear
end

然后我可以做:

usecda hrs_subset.dta

我想使用相同的程序来运行do-files。我如何区分程序中的do-files和dataset文件(使用我假设的if语句)?我愿意通过文件类型(.dta或.do)或在名称文件中使用一个术语来区分它们(do-files都有"讲座"在其中)。

此程序可以usecda hrs_subset.dta打开数据集,也可以usecda cda_lecture_nominal.do运行do文件

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是你可以解决的问题:

capture program drop usecda
program define usecda
    args data

    // check for .dta file
    if substr("`data'",length("`data'")-3,4) == ".dta" {

        //use "https://tamaravdd.github.io/icpsrcda/`data'", clear
        di "dta file"

    }

    // check for .do file
    else if substr("`data'",length("`data'")-2,3) == ".do" {

        //do "https://tamaravdd.github.io/icpsrcda/`data'"
        di "do file"

    }

    // throw error if not .dta or .do
    else {

        di as err "File `data' incorrectly specified"

    }
end


usecda asdf.dta

usecda asdf.do

usecda asdf.doc

这个想法是检查文件扩展名,如果它是.dta文件,那么做一些事情,如果它是.do文件做其他事情,如果它不是那些,那么向用户抛出错误。

我在程序定义中包含了每个示例。