我與PROC SQL在SAS的工作和我的PROC SQL查詢之一的行爲非常奇怪:別名和組通過SAS PROC SQL語句
我有一個大的數據集(約1萬行),其看起來是這樣的:
apple_key profit price cost months date
golden_d 0.03 12 4 3 01/12
golden_d 0.03 8 0 2 01/12
granny_s 0.05 15 5 5 02/12
red_d 0.04 13 0 1 01/12
golden_d 0.02 1 2 12 03/14
在我運行下面的查詢這組數據:
%let picking_date = 01/12; /* I simplify here - this part of my code definitely works */
proc sql;
CREATE TABLE output AS
SELECT
(CASE apple_key
WHEN "golden_d" THEN 1
WHEN "granny_s" THEN 2
WHEN "red_d" THEN 3
END) AS apple_id,
apple_key AS apple_name,
(CASE WHEN cost= 0 THEN 0
ELSE 1
END) AS cost_flag,
(CASE
WHEN CEIL(months/2) < 5 THEN CEIL(months/2)
ELSE 5
END) AS age,
"McDonalds" as farm,
sum(profit*price)/sum(price) as price_weighted_profit
FROM input_table
WHERE date = "&picking_date."d
AND price > cost
AND cost >= 0
AND cost >= 0
GROUP BY apple_id, apple_name, cost_flag, age, farm
;
run;
當我運行此我GROUP BY
聲明不起作用。我爲單個組獲得了一堆條目 (其中apple_id,apple_name,cost_flag,年齡和農場都是相同的,但是我的聚合不起作用)。
但是,當我分別運行GROUP BY(如下所示)時,一切正常。我爲每個組獲得一個具有「價格加權利潤」的條目:
proc sql;
CREATE TABLE output_tmp AS
SELECT
(CASE apple_key
WHEN "golden_d" THEN 1
WHEN "granny_s" THEN 2
WHEN "red_d" THEN 3
END) AS apple_id,
apple_key AS apple_name,
(CASE WHEN cost= 0 THEN 0
ELSE 1
END) AS cost_flag,
(CASE
WHEN CEIL(months/2) < 5 THEN CEIL(months/2)
ELSE 5
END) AS age,
"McDonalds" as farm
FROM input_table
WHERE date = "&picking_date."d
AND price > cost
AND cost >= 0
AND cost >= 0
;
CREATE TABLE output AS
SELECT
apple_id,
apple_name,
cost_flag,
age,
farm,
sum(profit*price)/sum(price) as price_weighted_profit
FROM output_tmp
GROUP BY apple_id, apple_name, cost_flag, age, farm
;
quit;
爲什麼會發生這種情況?我該如何解決它?這是讓我有點瘋狂......謝謝前面的幫助
你想通過做一組來計算計數或總和? – Teja
對不起。忘記將摘要函數語句移至第二個「create table」語句。現在應該是正確的。我在這裏試圖計算「price_weighted_profit」 – MRR
您希望從樣本輸入中得到什麼結果?你得到什麼輸出? – Tom