2017-06-21 6 views
0

私の学生がデータセットをダウンロードし、私のウェブサイトからファイルを実行できるStataで簡単なプログラムを書こうとしています。このプログラムは "usecda"と呼ばれ、以下はデータセットだけを開く例です。ファイルタイプ(データセットとdo-files)を区別するStataのプログラム

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ファイルにはすべて「講義」があります)ためにオープンしています。

このプログラムは、あなたの助けのための

感謝を提出行う実行するためにデータセットともusecda cda_lecture_nominal.doを開くためにusecda hrs_subset.dtaを行うことができるだろう!ここで

+2

嫌なことに、そうでなければ、名前がついたデータセットを読み込むために 'use'と打つことができるように、https://tamaravdd.github.io/icpsrcdaにそれを伝えてみませんか?または、名前付きのファイルに対して '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ファイルであるならば、何かをする、それが.doというファイルであれば何かをしますそれ以外の場合は、それらのいずれかではない場合は、ユーザーにエラーをスローします。

私はプログラム定義の下にそれぞれの例を含めました。

+0

ありがとう!前にsubstrコマンドを試してみましたが、文字列変数の代わりにデータセット名を使用する方法を知らなかったのです。これは非常に便利です。 –

関連する問題