Sql 按组检查它们是否符合列表,如果不符合,则创建缺少值的新行

Sql 按组检查它们是否符合列表,如果不符合,则创建缺少值的新行,sql,sas,Sql,Sas,我想按组检查它们是否符合列表,如果不符合,则创建一个包含所有缺少值的新行。如果您不知道SAS,但知道SQL Python或R,请告诉我。它可以给我一个主意 例如 如果country不是全部('table','chair'),则创建缺少值的新行 COUNTRY OBJECT U.S table U.S. chair France chair France table 谢谢,您可以使用交叉连接: select c.country, o.object from (

我想按组检查它们是否符合列表,如果不符合,则创建一个包含所有缺少值的新行。如果您不知道SAS,但知道SQL Python或R,请告诉我。它可以给我一个主意

例如

如果country不是全部('table','chair'),则创建缺少值的新行

COUNTRY  OBJECT
U.S       table
U.S.      chair
France    chair
France    table

谢谢,

您可以使用
交叉连接

select c.country, o.object
from (select distinct country from t) c cross join
     (select distinct object from t) o;

您可以使用交叉联接:

select c.country, o.object
from (select distinct country from t) c cross join
     (select distinct object from t) o;

如果所有值都在表中,那么PROC FREQ中的稀疏是一个很好的小技巧。它本质上强制所有可能值之间的交叉连接。如果表中的某个地方没有所有值,则需要不同的方法,通常是PrelofMT选项

proc freq data=have;
table country*object / sparse list out=want;
run;

proc print data=want;
run;

如果所有值都在表中,那么PROC FREQ中的稀疏是一个很好的小技巧。它本质上强制所有可能值之间的交叉连接。如果表中的某个地方没有所有值,则需要不同的方法,通常是PrelofMT选项

proc freq data=have;
table country*object / sparse list out=want;
run;

proc print data=want;
run;

一个独特的SAS选项是将
PROC FREQ
SPARSE
一起使用。下面是您要问的问题:

data have;
input COUNTRY  $ OBJECT $;
datalines;
U.S.      table
U.S.      chair
France    chair
;;;;
run;

proc freq data=have;
  tables country*object/sparse out=want(keep=country object);
run;

然而,它不一定适用于其他变量;您必须将其合并到主数据集(或左连接或其他)以获取其他变量的数据。

一个独特的SAS选项是使用
PROC FREQ
SPARSE
。下面是您要问的问题:

data have;
input COUNTRY  $ OBJECT $;
datalines;
U.S.      table
U.S.      chair
France    chair
;;;;
run;

proc freq data=have;
  tables country*object/sparse out=want(keep=country object);
run;
然而,它不一定适用于其他变量;您必须将其合并到主数据集(或左连接或其他)以获取其他变量的数据