2017-06-21 8 views
0

私のプロセスで2つのカウントがあり、同じ結果が得られます。SAS EG SQL 2つのカウントが同一である場合、 "SUCCESS"というテーブルを作成します。

1つはクエリのバッチの前にあり、1つは後であり、結合操作で行が追加または削除されていないことを確認します。

私はこれらのカウントを手動でチェックしていますが、うまくいくことを視覚的に示したいと思います。

私は、これらのカウントが等しい場合は "SUCCESS"という名前の空のテーブルを作成し、そうでない場合は "FAILURE"という名前のテーブルを作成するという考え方を持っていました。

これを達成するクエリを設計するのに手伝ってもらえますか?ここで

は、私が(明らかに動作していない)持っているものです。

PROC SQL; 
IF (SELECT count FROM WORK.count1) = (SELECT count FROM WORK.count2) 
    CREATE TABLE WORK.SUCCESS 
ELSE 
    CREATE TABLE WORK.FAILURE 
END 
QUIT; 

COUNT1とCOUNT2は、各フィールドの名前、カウントを含む2つのテーブル、および

+0

この目的のためにテーブルを作成することは悪い考えです。 –

+0

この種のテストをすばやく目に見える別の方法があれば、私は他のアイデアを歓迎します。私はSASに慣れていないので、私は事の人間工学に不満を抱いています、これは今私を満足させるでしょう。 –

+0

@Moody_Mudskipperなぜ、実行日時と結果を持つ追加のテーブルが1つありませんか? – JohnHC

答えて

1

私はそういうことをするためにPROC SQLを使用しません。カウントが異なる場合

data _null_; 
    merge count1(rename=(count=count1)) count2(rename=(count=count2)); 
    if count1 ne count2 then call execute('data failure;run;'); 
    else call execute('data success;run;'); 
run; 

それだけで失敗する仕事をしている方が良いと思いませんか? Enterprise Guideで正しく動作するかどうかは不明ですが、バッチ実行では条件付きでABORT ABEND文を実行できます。

data _null_; 
    merge count1(rename=(count=count1)) count2(rename=(count=count2)); 
    if count1 ne count2 then abort abend ; 
run; 
+0

SQL関数 'count()'の 'count'は擬似コードです。 – Joe

+0

ありがとうトムこれは私が望んでいたものです! –

0

の作成をテストするための値を持つ1行ですテーブルはおそらくこれを行うための最良の方法ではありませんが、メッセージをログに出力するマクロを作成することができます。

%macro check_obs(d1, d2); 

    data _null_; 
     if 0 then set &d1 nobs=n; 
     call symput('count1',n); 
     stop; 
    run; 
    %put &count1; 

    data _null_; 
     if 0 then set &d2 nobs=n; 
     call symput('count2',n); 
     stop; 
    run; 
    %put &count2; 

    %if &count1 = &count2 %then %put Obs equal; 
    %else %put Obs not equal; 
%mend; 

/* Call the macro here */ 
%check_obs(work.count1, work.count2); 

は、これを行うための簡単な方法があるかもしれませんが、すべてこのマクロは、マクロ変数count1count2への観測数を記憶していることと、それらが等しいならば、チェックしています。

0

私が通常これを行う方法は、有用なものを結果ウィンドウに表示することです。

Title "Counts of Male and Female class members - check for equality"; 
proc sql; 
    select 
    (select count(1) from sashelp.class where sex='M') as male_count, 
    (select count(1) from sashelp.class where sex='F') as female_count 
    from sashelp.class where name='Alfred' 
    ; 
quit; 

明らかに、これをtable1とtable2のクエリに変更します。実際にfrom sashelp.class where name='Alfred'を残すこともできます。SAS PROC SQLにFROMが必要なため、1行の結果セット(たとえば、Oracleの場合はfrom dualに似ています)を提供する以外は何もしません。

タイトルを使用して、レポートから何を収集すべきかを教えてください。

関連する問題