2016-10-24 3 views
1

私はProc sqlの新機能で、頭を壁に当てているように感じています。基本的に、いくつかの異なるタイプの小計を作りたいと思っています。私は苦労しています。私は2つのSQL文でそれを行う方法を理解することができますが、サブクエリを使用して1つの文に結合する方法を理解することはできません。Proc sqlの小計とサブクエリ

サンプル・データ

*job, gender 
*florist, female 
*florist, female 
*florist, male 
*florist, male 
*Manager, female 
*Manager, female 
*Manager, female 
*Manager, male 
*nurse, female 
*nurse, female 
*nurse, male 

私は自分のコードから取得羽目になるたいのは次のとおりです。(二段階でそれをしない)

Job Title| Gender | All answers to gender | Job by gender 
Florist | female | 7      | 2 
Florist | male | 4      | 2 
Manager | female | 7      | 3 
Manager | male | 4      | 1 
nurse | female | 7      | 2 
nurse | male | 4      | 1 

私の現在のコードは

proc sql; 
    create table newdata as 
      select gender, job, 
      count(gender) as GenderCount 
      from datasource where gender in ('f','m') 
      group by gender; 

    select * from newdata; 
quit 

proc sql; 
    create table newdata2 as 
      select *, 
      count(gender) as JobsByGender 
      from newdata 
      group by q1, q21; 

     select distinct * from newdata2 order by q21, q1; 
     quit; 
+0

最初のproc SQL文の最後に "select * from newdata"を実行する理由を説明できますか? –

+0

また、複数のproc SQL文を使用しない理由がありますか?データを1つのテーブルにまとめるだけですか? –

+0

はい、私はそれを何度もやらなければならないので、1つのテーブルに入れたいと思っています。私はおそらく、超初心者で、同じようなサンプルコードを使って私がこれをやっていることを理解しているので、私は本当に理解していないように感じるので、できるだけ混乱させようとしているので、各部が何をしているのか。 – eee333

答えて

1
です

サブクエリに参加して、期待どおりの結果を得ることができます。

proc sql; 
    create table newdata as 
     select bd.job, 
      bd.gender, 
      sq.count_gender, 
      count(bd.job) as JobsByGender 
     from basedata bd 
     inner join 
      (select gender, 
       count(gender) as count_gender 
      from base_data 
      group by gender) sq 
     on sq.gender = bd.gender 
     group by bd.job, bd.gender; 
quit; 

サブクエリがon sq.gender = bd.gender

で指定された内部結合

Gender | count_gender 
--------------------- 
Male | 4 
Female | 7 

のように見えるデータセットは、男女それぞれに正しい番号を一致して作成正直なところ、これのほとんどは、単に一般的なSQLです。今後、より多くのproc SQL文を実行する予定がある場合は、 http://www.sqlcourse.com/http://www.sqlcourse2.com/

のチュートリアルを参照することを強くお勧めします。サンプルを使用するのではなく、あなたが理解していないコード。

+0

最後のグループの文でエラーメッセージを表示しています: – eee333

+0

エラー22-322:構文エラーです。!、!!、&、*、**、+、 '、'、 - 、/ 、<, <=, <>、=、> =、?、AND、BETWEEN、 CONTAINS、EQ、EQT、GE、GET、GT、GTT、HA、LE、LET、LIKE、LT、LTT、NE、NET、ORDER 、^ =、|、||、〜=。 ERROR 76-322:構文エラーです。文は無視されます。 – eee333

+0

最後の 'GROUP BY'では、外部クエリの集約されていない列であるadd * sq.count_gender *になります。 – Parfait