[英]How to create new column based on condition of another column PROC SQL
我正在嘗試使用 SAS 中的 sql 語句根據另一列的條件創建一組新列。 但是,使用我當前的代碼,只要不滿足條件,它就會顯示為 Null 值。 但我不希望用這些空白來構造新列。 有人可以幫忙嗎? 在實際數據集中,我將幾個表連接在一起。
這是一個簡化的模擬數據集:
這是使用的代碼:
PROC SQL;
Create table Sales AS
SELECT
SUM (CASE WHEN Sub_Category in('Coffee')THEN Previous_Sales END)AS
Coffee_Sale,
SUM(CASE WHEN Sub_Category in('Tea')THEN Previous_Sales END)AS Tea_Sale,
SUM(CASE WHEN Sub_Category in('Soda')THEN Previous_Sales END)AS Soda_Sale
FROM data
GROUP BY Sub_Category;
我正在嘗試采用這種格式:
此代碼正在返回:
您只需要從現有代碼中刪除group by
。
Create table Sales AS
SELECT SUM (CASE WHEN Sub_Category in('Coffee')THEN Previous_Sales END)AS Coffee_Sale,
SUM(CASE WHEN Sub_Category in('Tea')THEN Previous_Sales END)AS Tea_Sale,
SUM(CASE WHEN Sub_Category in('Soda')THEN Previous_Sales END)AS Soda_Sale
FROM data -- no group by
您可以為啤酒和水添加相同的SUM
和case
表達式。
使用 PIVOT,Oracle 的本文檔中的更多詳細信息。
SELECT * FROM
(SELECT Previous_Sales, Sub_Category
FROM data)
PIVOT (
SUM(Previous_Sales),
FOR Sub_Category IN ('Coffee', 'Tea', 'Soda')
)
我不會使用 SQL 來解決這個問題,因為您需要硬卡值和變量名(或使用一些代碼生成)。 如果您只是使用標准 SAS 程序,您的代碼將自動調整為新的子類別。
proc summary data=have nway ;
class sub_category ;
var previous_sales ;
output out=stats sum= ;
run;
proc transpose data=stats out=want(drop=_name_) suffix=_sales;
id sub_category;
var previous_sales;
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.