Как обратиться к конкретной строке из таблицы? Как вывести первые несколько записей из таблицы ?

Всем привет.

datastep

 

В принципе на эти вопросы каждый знает ответы.

Однако ниже приведено по три разных способа ответить на каждый из вопросов, как в формате data step, так и с помощью proc sql. Думаю о каких-то способах вы можете не знать.

Также в статье приводиться аналог obs из data step для кода proc sql, полагаю такой вопрос у вас когда-либо появлялся.

Читать далее Как обратиться к конкретной строке из таблицы? Как вывести первые несколько записей из таблицы ?

Ответ на задачу из поста: «Объединение таблицы с помощью SET»

На прошлой неделе мы рассмотрели проблему некорректной работы шага data step, где с помощью set объединялись две таблицы.

И так правильный ответ:

Дело в том, что при значение amount отсутствует в таблице B.

При написании set a b сначала считываются все данные из таблицы A, затем все данные из таблицы B, т.е. происходит конкатинация данных.

В нашем случае вектор PDV (Program Data Vector) будет выглядеть следущим образом, когда начнет читать данные из таблицы B:

до прохода data step:

_N_ _ERROR_ ID AMOUNT
3 0 . .

далее после считывания первых значений из таблицы B:

_N_ _ERROR_ ID AMOUNT
3 0 1001 .

после прохода всего шага:

_N_ _ERROR_ ID AMOUNT
3 0   1001      3

Следущий круг цыкла:

до прохода data step:

_N_ _ERROR_ ID AMOUNT
3 0  1001      3

После прохода считывания данных из таблицы B:

_N_ _ERROR_ ID AMOUNT
3 0  1003      3

Прошу обратить внимания, что на этом этапе значение amount не перетелось.

После прохода всего шага:
_N_ _ERROR_ ID AMOUNT
3 0  1003      3

Вот таким образом мы получили заполненные занчения amount даже у тех ID из таблицы B, которые не соответсвовали условию IF.

P.S.

Решить данную проблему можно просто добавив мустой столбец amount в таблицу B.
После этого все будет работать корректно.

SAS DATA STEP. Объединение таблиц с пощью SET.

Все привет.

Сегодня речь пойдет о старом и добром языке DATA STEP.

Не для кого не секрет, что получиться в результате следующего кода:

data c;
set a b;
run;

Т.е. в set указаны две таблицы A и B.

А теперь давайте проведем следущий эксперимент:

Возьмем таблицу A

Т.е это таблица с двумя полями (ID и amount)

Возьмем таблицу B

Таблица B с одним полем ID.

И теперь напишем следующий запрос:

А теперь внимание вопрос:

Почему результат выглядит следущим образом?

Конкретно требуется объяснить почему в четвертой строчке (ID=10002) Значение amount=3 ?

Жду Ваших решений.

P.S.
Нашел похожий пост здесь. Опубликованный уже через месяц после моего с той же проблемой.

Также там предлагается еще одно изящное решение.