#sql #sas
Вопрос:
Я хочу проверить по группам, соответствуют ли они списку, и если нет, создайте новую строку со всеми отсутствующими значениями. Если вы не знаете в SAS, но знаете в SQL Python или R, пожалуйста, дайте мне знать. Это может навести меня на мысль.
напр..
COUNTRY OBJECT
U.S table
U.S. chair
France chair
если страна не во всех («таблица», «стул»), то создайте новую строку с отсутствующим значением.
COUNTRY OBJECT
U.S table
U.S. chair
France chair
France table
Спасибо,
Ответ №1:
Вы можете использовать cross join
:
select c.country, o.object
from (select distinct country from t) c cross join
(select distinct object from t) o;
Ответ №2:
Если все значения указаны в таблице, РАЗРЕЖЕННОСТЬ в PROC FREQ-это приятная маленькая хитрость. Это, по сути, приводит к перекрестному соединению всех возможных значений. Если у вас где-то нет всех значений в таблице, вам нужен другой подход, обычно опция предварительной загрузки.
proc freq data=have;
table country*object / sparse list out=want;
run;
proc print data=want;
run;
Ответ №3:
Один из идиотских вариантов 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;
Однако это не обязательно будет работать с другими переменными; вам придется объединить их с основным набором данных (или левым соединением или чем-то еще), чтобы получить данные других переменных.