Как использовать предельные наблюдения в SAS при объединении двух таблиц - PullRequest
0 голосов
/ 14 февраля 2019

Я использую sas и хочу ограничить количество выходных строк для каждой таблицы после заказа источника данных, кто-нибудь может подсказать, как этого добиться в SAS?Я знаю, что в MySQL я могу просто использовать лимит для выполнения работы, но в SAS, если я использую (obs=10) или (outobs =10), он просто ограничивает количество вводимых данных.Вот мой процесс sql

select distinct sales as a from lucas
group by province 
outer union
select distinct sales as b from lucas
group by province
order by a desc, b asc; 

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Proc SQL не реализует текущие современные предложения, такие как LIMIT, OFFSET, FETCH, и не имеет функций разделения, с которыми вы, возможно, знакомы.

Тем не менее, вы не можетестрока ограничивает вывод отсортированного вложенного выбора или представления, однако вы можете ограничить вывод таблицей, используя параметр OUTOBS.

В этом примере создаются две таблицы, каждая из которых соответствует ограничению дополнительного выбора.строки отсортированного результирующего набора.Параметр сбрасывается перед объединением.

proc sql;

  reset outobs=10;

  create table have_ss1 as
  select distinct msrp as msrp_1 
   from sashelp.cars 
   group by model
  ;

  create table have_ss2 as 
  select distinct msrp as msrp_2
   from sashelp.cars 
   group by model
  ;

  reset outobs=&sysmaxlong;

  create table want as 
  select * from have_ss1
  outer union
  select * from have_ss2
  ;

В окне журнала SAS отображаются информационные предупреждения, такие как:

WARNING: A GROUP BY clause has been transformed into an ORDER BY clause because neither the
         SELECT clause nor the optional HAVING clause of the associated table-expression
         referenced a summary function.
WARNING: The query as specified involves ordering by an item that doesn't appear in its SELECT
         clause. Since you are ordering the output of a SELECT DISTINCT it may appear that some
         duplicates have not been eliminated.
WARNING: Statement terminated early due to OUTOBS=10 option.
0 голосов
/ 14 февраля 2019

Я бы сделал это так, так как это ограничивает набор данных / таблицу, созданную в proc sql, а не входные данные из набора данных / таблицы lucas:

proc sql outobs=10;
select distinct sales as a from lucas
group by province 
outer union
select distinct sales as b from lucas
group by province
order by a desc, b asc; 
quit;

это ограничит только вывод, а неввод!

0 голосов
/ 14 февраля 2019

Обычно вы просто используете опцию OBS=, когда читает данные.

data top10;
  set have (obs=10);
  by size descending;
run;

Если у вас еще нет набора данных, отсортированного в этом порядке, и вы хотите избежатьвыписав полный набор данных, вы можете использовать VIEW для генерации и / или заказа за вас.

proc sql ;
create view derived_sales as
  select id,sum(sales) as total_sales
  from have 
  group by id 
  order by calculated total_sales desc
;
quit;
data top10_sales;
  set derived_sales(obs=10);
run;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...