2015-10-17 3 views
0

Я создаю 7 разных таблиц (tmp1, tmp2 ... tmp7), используя приведенный ниже код. Каждая таблица acc имеет одинаковые столбцы и имена, единственное отличие состоит в том, что каждая таблица находится в другой библиотеке (test1, test2 ... test7). Можно ли сделать какой-то цикл, вместо того, чтобы вводить код ниже 7 раз?SAS Создание нескольких таблиц

proc sql; 
    create table tmp1 as 
    select * 
    from test1.acc 
    where datepart(timestamp) in 
     (select max(datepart(timestamp)) 
       from test1.acc); 
    quit; 
+0

Непонятно, каков ваш точный вопрос, как упростить свой запрос? И какова ваша проблема с отметкой времени? – Reeza

+0

Вы использовали язык макросов SAS? Это один из способов избежать копирования и вставки. Это язык, который используется для генерации кода SAS вместо того, чтобы вводить его самостоятельно. Вы также можете просто прочитать все семь таблиц в одном наборе данных SAS. – Quentin

ответ

0

Это может быть сделано с использованием языка макросов SAS, который предназначен для таких случаев. Я не буду вдаваться в большую дискуссию, но следующее должно работать. Справедливое предупреждение, я не тестировал это, поэтому я мог бы иметь синтаксическую ошибку где-то там, но если ничего другого, это должно дать вам основание для завершения решения.

/* Макросы начинаются с ключевого слова% macro. Макросы могут принимать параметры, но в этом случае нет необходимости. Макроконкретные команды обозначаются символом «%». */

%macro read_multiple_files; 
    %do i = 1 %to 7; 
     /* from this point forward, the use of '&i.' will resolve to the 
      appropriate loop counter 1-7 */ 
     proc sql; 
      create table tmp&i. as 
       select * 
        from test&i..acc 
         where datepart(timestamp) in 
          (select max(datepart(timestamp)) 
           from test&i..acc); 
     run; quit; 
    %end; 
%mend read_multiple_files; 
/* The '%mend' command doesn't really require the name of the macro to be appended, but I consider it to be good practice to include it */ 

/* The preceding code defines the macro program. Now to execute the job, you NEED one last command. */ 

%read_multiple_files; 

Надеюсь, это будет полезно. Вы обнаружите, что программирование макросов очень полезно во многих случаях. Вот хорошая белая бумага, чтобы начать. http://www2.sas.com/proceedings/sugi29/243-29.pdf.

Смежные вопросы