Это может быть сделано с использованием языка макросов 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.
Непонятно, каков ваш точный вопрос, как упростить свой запрос? И какова ваша проблема с отметкой времени? – Reeza
Вы использовали язык макросов SAS? Это один из способов избежать копирования и вставки. Это язык, который используется для генерации кода SAS вместо того, чтобы вводить его самостоятельно. Вы также можете просто прочитать все семь таблиц в одном наборе данных SAS. – Quentin