我正在尝试在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文件
感谢您的帮助!
答案 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文件做其他事情,如果它不是那些,那么向用户抛出错误。
我在程序定义中包含了每个示例。