按组检查他们是否符合列表,如果不符合,则创建具有缺失值的新行
check by group if they meet a list and if not, create new rows with missing values
我想按组检查他们是否符合列表,如果不符合,则创建一个包含所有缺失值的新行。如果您不知道 SAS 但知道 SQL Python 或 R,请告诉我。它可以给我一个想法。
例如
COUNTRY OBJECT
U.S table
U.S. chair
France chair
如果国家/地区不在所有 ('table','chair') 中,则创建包含缺失值的新行。
COUNTRY OBJECT
U.S table
U.S. chair
France chair
France table
谢谢,
您可以使用 cross join
:
select c.country, o.object
from (select distinct country from t) c cross join
(select distinct object from t) o;
如果所有值都在table,PROC FREQ 中的SPARSE 是一个不错的小技巧。它本质上强制所有可能值之间的交叉连接。如果您没有 table 某处的所有值,那么您需要一种不同的方法,通常是 PRELOADFMT 选项。
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 但知道 SQL Python 或 R,请告诉我。它可以给我一个想法。
例如
COUNTRY OBJECT
U.S table
U.S. chair
France chair
如果国家/地区不在所有 ('table','chair') 中,则创建包含缺失值的新行。
COUNTRY OBJECT
U.S table
U.S. chair
France chair
France table
谢谢,
您可以使用 cross join
:
select c.country, o.object
from (select distinct country from t) c cross join
(select distinct object from t) o;
如果所有值都在table,PROC FREQ 中的SPARSE 是一个不错的小技巧。它本质上强制所有可能值之间的交叉连接。如果您没有 table 某处的所有值,那么您需要一种不同的方法,通常是 PRELOADFMT 选项。
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;
但是,它不一定适用于其他变量;您必须将其合并到主数据集(或左连接或其他)才能获取其他变量的数据。