2017-06-21 72 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命令,但不知道如何使用數據集名稱而不是字符串變量。這非常有用。 –