If statement Stata中区分文件类型(数据集和do文件)的程序

If statement Stata中区分文件类型(数据集和do文件)的程序,if-statement,dataset,stata,If Statement,Dataset,Stata,我正在尝试用Stata编写一个简单的程序,我的学生可以从我的网站下载数据集和示例do文件。该程序称为“usecda”,下面是它仅打开数据集的示例 capture program drop usecda program define usecda args data use https://tamaravdd.github.io/icpsrcda/`data', clear end 然后我可以做: usecda hrs_subset.dta 我希

我正在尝试用Stata编写一个简单的程序,我的学生可以从我的网站下载数据集和示例do文件。该程序称为“usecda”,下面是它仅打开数据集的示例

capture     program drop usecda
program     define usecda
args        data 
use         https://tamaravdd.github.io/icpsrcda/`data', clear
end
然后我可以做:

usecda hrs_subset.dta
我希望相同的程序运行do文件。如何在程序中区分do文件和dataset文件(使用我假设的if语句)?我愿意通过文件类型(.dta或.do)或在文件名中使用术语(do文件中都有“讲座”)来区分它们

该程序可以执行
usecda hrs\u subset.dta
打开数据集,也可以执行
usecda cda\u touch\u nominal.do
运行do文件


谢谢你的帮助

以下是您需要解决的问题:

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文件,则执行其他操作;如果不是这两个文件中的任何一个,则向用户抛出错误


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

颠覆性地,或者,为什么不告诉他们东西在,这样他们就可以键入
使用
读取命名数据集?或
do
用于命名的do文件
use
do
是在任何情况下都是关键的命令;为什么要将自己的命令添加到学习负担中,而它们只是包装器?感谢您的反馈!这是一个非常入门的课程,所以我想让他们只处理我的github网站一次,然后用一个简单的命令下载所有内容。非常感谢!我以前尝试过substr命令,但不知道如何使用数据集名称而不是字符串变量。这是非常有用的。