Как назначить значение новой переменной, используя другой набор данных, который содержит одно значение в SAS - PullRequest
0 голосов
/ 03 июня 2019

у меня есть датафрейм

ID value1
1   12
2   345
3   342

у меня есть второй фрейм данных

value2
3823

как мне получить следующий результат?

ID value1 value2
1   12     3823
2   345    3823
3   342    3823

любые сделанные мной соединения дали мне

ID value1 value2
1   12       .
2   345      .
3   342      .
.    .      3823

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Нет необходимости в объединениях или вспомогательных переменных:

data have;
do i = 1 to 3;
  output;
end;
run;

data lookup;
  j = 1;
run;

data want;
  set have; 
  if _n_ = 1 then set lookup;
run;

Без if _n_ = 1 шаг данных останавливается после одной итерации, когда он пытается прочитать вторую строку из набора данных поиска и обнаруживает, что естьстрок не осталось.

Примечание: для этого необходимо, чтобы набор данных have еще не содержал переменную с тем же именем, что и переменная (и), прикрепленная из набора данных поиска.

1 голос
/ 03 июня 2019

Безусловно, самый простой способ сделать это - использовать PROC SQL и определить условие 1 = 1, которое всегда верно для каждого сравнения:

data first; 
    input ID value1 @@;
    cards; 
    1   12 2   345 3   342
run;

data second;
    input value2 ; 
    cards;
    3823
run;

proc sql; 
    create table wanted as 
    select * from first
    left join second 
    on 1 =1
;quit;

Редактировать: Насколько я знаю, не существует прямого способа объединения наборов данных по каждой строке, но вы можете сделать следующий трюк:

Добавить переменную Help:

data second_trick; 
set second; 
    help=1; 
run;
data first_trick; 
    set first; 
    help=1; 
run;

Затем мы просто выполняем слияние статической переменной:

data wanted_trick; 
    merge first_trick(in=a) second_trick; 
    by help; 
    if a; /*Left join, just to be sure.*/
run;

теперь это работает, только если вы хотите добавить одно статическое значение. Не пытайтесь использовать его, ваш Второй набор имеет больше строк.

Подробнее о слияниях и объединениях см .: https://support.sas.com/resources/papers/proceedings/proceedings/sugi30/249-30.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...