2017-06-21 73 views
0

我想在Stata中编写一个简单的程序,我的学生可以从我的网站下载数据集和示例文件。这个程序被称为“usecda”,下面是仅打开数据集的示例。在Stata中区分文件类型(数据集和do-files)的程序

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

然后,我可以这样做:

usecda hrs_subset.dta 

我想同样的程序运行做-文件。我如何区分程序中的do-files与数据集文件(使用if语句,我假设)?我愿意通过文件类型(.dta或.do)或在名称文件中使用术语来区分它们(do-files都有“演讲”)。

该计划将能够做的usecda hrs_subset.dta打开数据集,也usecda cda_lecture_nominal.do运行来执行文件

感谢您的帮助!

+2

颠覆性或其他方式,为什么不告诉他们东西在https://tamaravdd.github.io/icpsrcda,以便他们可以键入'use'来读取已命名的数据集?或者为命名的do文件执行操作? 'use'和'do'是无论如何都是关键的命令;当他们只是包装时,为什么要将自己的命令添加到学习负担中? –

+0

感谢您的反馈!这是一个非常入门的课,所以我想让他们只处理我的github网站一次,然后有一个简单的命令来下载一切。 –

回答

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文件,然后做一些事情,如果它是一个。做文件做一些事情否则,如果它们不是那些那么就向用户抛出一个错误。

我在程序定义下包含了每个例子。

+0

非常感谢!我之前曾尝试过substr命令,但不知道如何使用数据集名称而不是字符串变量。这非常有用。 –