2017-11-02 4 views
0

私は、異方性のために複数のテストを作成するよう教えてくれるSASの練習をしています。 私は自分のテストを行い、その後、変数を修正するためにテストの残差を保たなければなりません。サステーブル自体が空になる

しかし、dテーブルは常に0の観測値で終わっています。元のデータセットに基づいていると述べているので、ほとんどそれは空になっているようです。私はそれに3時間を費やしました、なぜそれがそれをするのか分かりませんでした。私は複数のマシンで何度も起こっています。私がいただ

libname mag "/folders/myfolders/data/"; 

data c; set mag.drogue; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
run; 
data d; set c; 
run; 

/*2. App Brandt*/ 
proc contents data=c; 
proc reg data=c; 
model lg_pxogramme= lg_qtitegramme puretemoy /spec; 
output out=d r=r_hat; 
run; 

/*3.*/ 
data d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 
proc reg data=d; 
model r_2= lg_qtitegramme puretemoy; 
output out=d p=p_hat; 
run; 
data d; 
pxogramme_c= lg_pxogramme/p_hat; 
qtitegramme_c= lg_qtitegramme/p_hat; 
puretemoy_c= puretemoy/p_hat; 
run; 
proc reg data=d; 
model pxogramme_c= qtitegramme_c puretemoy_c; 
run; 

2つのエラー:

  • ERROR:可変PURETEMOYないことが判明

    は、ここに私のコードです。

  • エラー:有効な観測値が見つかりません。

おそらく、データステップの後にあるためテーブルが空であったため、モデルを指定すると2つのエラーが表示される可能性があります。

+0

コードの最後にゼロからテーブルdを作成すると、SASがデータステップを実行できないというエラーがある場合、出力テーブルは空です。 'PURETEMOY'列が存在しない理由を調べてください。 – Petr

答えて

0

あなたはこのようなステートメントで設定したDデータを再作成されています

data d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 

古いコピーを含めるようにしようとしている場合、あなたはsetステートメントを追加する必要があります。

data d; 
set d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 
+0

私の出力を別のテーブルに置く(eと呼ぶ) "set d e"を使ってdとマージする プログラムが実行された後にdの値を見つけることができなかったのに、奇妙だけど大丈夫だと思う。 –

2

最初の手順では、cというデータセットを作成し、dという名前のコピーを作成します。 2番目のステップでは、データセットdをデータセットdproc regの出力に置き換えて、proc regステートメントにout=dと指定して置き換えます。

3つ目のステップでは、dataprocのステップごとにすべてdを再度上書きします。 data d;のステップでは、存在しない変数から値を割り当てるので、欠落値のレコードが1つしか含まれていない何もない(no setステートメント)毎回新しいデータセットを作成します。 proc regのステップでは、ddata=d)から読み取り、結果をデータに上書きするdout=d)に出力します。

0

ダブルチェックをSASに何をしてSASのログを読んで何をしたのかを確認してください。各ステップごとに、どのデータが読み込まれ、どのデータが書き込まれたかが示されます。

いくつかのプログラムステップを見てみましょう。

まず、既存のデータセットを読み込み、Cを作成します。新しい変数を2つ作成すると、これが実行されます。

data c; 
    set mag.drogue; 
    lg_pxogramme= log(pxogramme); 
    lg_qtitegramme= log(qtitegramme); 
run; 

次に、この新しいデータセットをDに複製します。

data d; 
    set c; 
run; 

そしてコードは、回帰分析の結果をDに上書きします。 OUTPUT文のOUT=Dを参照してください。それは再び何の入力データを持たないデータ・ステップを使用してDを上書きした後

proc reg data=c; 
    model lg_pxogramme= lg_qtitegramme puretemoy /spec; 
    output out=d r=r_hat; 
run; 

。したがって、1つの観測値と6つの欠損変数を持つDが作成されます。

data d; 
    lg_pxogramme= log(pxogramme); 
    lg_qtitegramme= log(qtitegramme); 
    r_2= r_hat**2; 
run; 

最初にこの手順を修正してください。読み取るデータを指示するには、SETステートメントを追加する必要があります。また、異なる出力データセットを使用して、回帰の出力を上書きしないようにする必要があります。あなたはそれが回帰の出力を読むことを望みますか?最初のステップが作成されたCデータセット? Cを作成するために使用された元の固定データセットですか?

関連する問題