如何解决在SQL中没有用于组合的数据时创建空行
大多数人可能已经问过这个问题,我也曾尝试过,但无法解决。我有一个表,其中包含15个具有非度量的属性/列和15个具有度量的列。对于非度量列-如果不存在任何组合,我想创建空值。我正在使用可以具有简单PROC SQL语句的SAS。可以说我有如下数据: enter image description here
Name | Location | Holiday | Time | DishCnt | TastedGood
Bill 1st Fl. Easter AM 3 Yes
Bill 1st Fl. Easter PM 3 Yes
Bill 1st Fl. Kawanza AM 2 Yes
Bill 2st Fl. Kawanza AM 2 Yes
Sameer 1st Fl. Easter AM 1 No
Sameer 1st Fl. Easter PM 2 Yes
Sameer 1st Fl. Kawanza AM 1 Yes
Peter 1st Fl. Easter AM 1 No
Peter 1st Fl. Kawanza AM 2 No
我想检查每个非测量行的组合,如果没有,那么我想创建一个新行并将其设置为null或0。 enter image description here 我想要的样本数据如下:
Name | Location | Holiday | Time | DishCnt | TastedGood
Bill 1st Fl. Easter AM 3 Yes
Bill 1st Fl. Easter PM 3 Yes
Bill 1st Fl. Kawanza AM 2 Yes
Bill 2st Fl. Kawanza AM 2 Yes
Sameer 1st Fl. Easter AM 1 No
Sameer 1st Fl. Easter PM 2 Yes
Sameer 1st Fl. Kawanza AM 1 Yes
Sameer 2st Fl. Kawanza AM NULL NULL
Peter 1st Fl. Easter AM 1 No
Peter 1st Fl. Kawanza AM 2 No
Peter 1st Fl. Easter PM NULL NULL
Peter 2st Fl. Kawanza AM NULL NULL
我做的代码是我试图交叉连接同一张表并与公共列连接。像这样的东西
SELECT *
FROM Holidays H
CROSS JOIN Holidays T
LEFT JOIN Holidays R ON H.HoludayKey = R.HolidayKey AND T.TimeKey=R.TimeKey
预先感谢您的帮助。
谢谢!
解决方法
请考虑交叉连接的数据集,以获取名称,位置,假日和时间的所有可能值。然后使用LEFT JOIN
运行此查询到实际数据集。任何不匹配的行都将填充NULL
或丢失。
proc sql;
CREATE TABLE combns AS
SELECT n.Name,m.Location,m.Holiday,m.Time
FROM
(SELECT DISTINCT Name
FROM Holidays) n
CROSS JOIN
(SELECT DISTINCT Location,Holiday,Time
FROM Holidays) m;
CREATE TABLE final_table AS
SELECT c.Name,c.Location,c.Holiday,c.Time,h.DishCnt,h.TastedGood
FROM combns c
LEFT JOIN Holidays h
ON c.Name = h.Name
AND c.Location = h.Location
AND c.Holiday = h.Holiday
AND c.Time = h.Time;
quit;
输入 (OP的发布数据)
data Holidays;
infile datalines delimiter=',' DSD;
length Name $8 Location $8 Holiday $8 Time $2 DishCnt TastedGood $3;
input Name Location Holiday Time DishCnt TastedGood;
datalines;
Bill,1st Fl.,Easter,AM,3,Yes
Bill,PM,Kawanza,2,2st Fl.,Yes
Sameer,1,No
Sameer,Yes
Peter,No
Peter,No
;
输出 (在proc sql
上方运行之后)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。