2016-11-29 17 views
-1

人、SAS proc SQLネストされた関数

私の目標は簡単です。最初にグループ別に数を数え、各グループ内で平均を求めます。私は2つのSQLを試しましたが、いずれも成功しませんでした。コードを入れ子にする方法を知っている人はいらっしゃいませんか?

おかげで、 アンドレア

まず試してみてください。

proc sql; 
create table bhr_surg as 
select a.*, mean(b.numsurg) as meansurg from bhr as a, 
(select count(b.surgid) as numsurg from bhr as b) 

where surgid not in (1,2,3,7777) 
group by surgid,procyr; 
quit; 

2回目の試行:

proc sql; 
create table bhr_surg as 
select *, count(surgid) as numsurg, mean(calculated numsurg) as meansurg from bhr 

where surgid not in (1,2,3,7777) 
group by surgid,procyr; 
quit; 
+0

bhrの列は何ですか?それが動作しないと言うと、エラーメッセージは何ですか?さらに、sashelpライブラリをサンプルデータとして使用するスタンドアロンのサンプルを提供してください。 – Snorex

+0

最初の例では、 "from bhr as a"は有効な構文ではありません。 FROM句のエイリアスは、 "from bhr a"(no "as")のような構文を使用します。 – Snorex

+0

こんにちはSnorehorse、最初の例では、2つのエラー。まず、「相関名Bで識別される表/ビューに列numsurgが見つかりませんでした」 2番目は「平均要約関数は数値引数を必要とします。私は第二のものが最初のものだと思う。 "as"はここで本当に問題ではありません。私は同じエラーとして "as"を削除します。データは非常にシンプルで、外科医は外科医IDです。私は別の年(procyr)で各外科医(computedid)を数えたいと思う。 – Andrea

答えて

0

あなたの問題は、あなたがsurgidに加えて、何かにグループ化しているということですので、あなたのカウント手段とは、IDグループのサブセットの数と手段です。次の作業が必要です:

data have; 
    input surgid numsurg; 
    datalines; 
10 1000 
10 1500 
10 2000 
20 3000 
20 4000 
30 2500 
; 
run; 


proc sql; 
    create table want as select distinct 
     *, count(numsurg) as count, mean(numsurg) as mean 
     from have 
     group by surgid; 
quit;