2017-06-02 7 views
0

大量のcsvファイルをインポートして変更する必要があります。私はに実行類似の名前の変数のサブセットを削除する

foreach v of var materialcost* costofemployees* city country { 
     capture drop `v' 
    } 

をしようとした場合、このプロセスの中でいくつかの点で私は、しかし、地元の人々はまたmaterialcost* のようなオープンエンドの記述を許可していない次のコードに

local vlist materialcost* costofemployees* city country 

    foreach v in vlist{ 
     capture drop `v' 
    } 

を使用したいです名前にmaterialcostという変数が常に見つかるとは限りません。エラーが発生します。

Stataにdropという変数があり、それらは実際にデータに存在する場合はmaterialcostで始まります。

+0

'materialcost *'は名前に 'materialcost'を持つすべての変数を拾いません。 –

答えて

2

まず、地元の人々がmaterialcost*のような終わりのない説明を許可していないという記述は、事実上および原則として誤っています。地元の缶に

. local vlist materialcost* costofemployees* city country 

. di "`vlist'" 
materialcost* costofemployees* city country 

ので、割り当てと実際に作業を行います。

私はStataの中でそれをやりました。原則は、地元の人々がテキストのコンテナであり、そのテキストが何であるか(または意味する)か、ここで噛んでいない長さの限界を超えて、あるいは通常は何かを懸念していることを知らないということです。

あなたが言った理由は、これがあなたが望んだことをしなかった可能性があります。構文はちょうど定義されたローカルの内容を介して動作するforeachを取得する方法法的ですが、ないこと

foreach v in vlist { 
    capture drop `v' 
} 

。そのループは

vlistは、データセット内の変数名でなければ何もしません
capture drop vlist 

に沸きます。

あなたの主な問題はこれです。あなたは

foreach v of var materialcost* costofemployees* city country { 

を言うなら、それは何varキーワードの後は、変数リストが実際にあることが不可欠だとforeachはそれがそうでない場合は、ループを入力せずにあなたをスローします。例外を無視しません。ループ内のcaptureは役に立ちません。 Stataはそれを決して得られません。しかし、私の推測では、あなたは変数が存在する可能性があるかについて間違っているかもしれ請求をしないと、(b)captureはというエラーをキャッチする作業を行う(a)のよう

foreach v in materialcost* costofemployees* city country { 
    capture drop `v' 
} 

はあなたのために働くべきであるということですそのような変数が存在しない場合はdropが発生します。

+0

非常に徹底的な説明をありがとうございます。私の最初の発言は確かに間違っていた。自分自身でローカルを表示しようとしたとき、間違った結論につながる ""を忘れてしまった。 – Peter

関連する問題