簡體   English   中英

如何根據另一列的條件創建新列 PROC SQL

[英]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 

您可以為啤酒和水添加相同的SUMcase表達式。

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM