我正在尝试在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文件。我如何区分程序中的 do 文件和数据集文件(使用我假设的 if 语句(?我愿意通过文件类型(.dta 或 .do(或通过在名称文件中使用术语来区分它们(do-file 中都有"讲座"(。
该程序将能够执行打开数据集usecda hrs_subset.dta
,还可以usecda cda_lecture_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文件,做其他事情,如果它不是其中任何一个,则向用户抛出错误。
我在程序定义下包括了每个示例。