2012-06-09 3 views
1

У меня есть 24 набора данных, которые структурированы таким же образом. Под этим я имею в виду те же заголовки столбцов (время, дата, цена, символ запаса), структуру набора данных и т. Д. Я не хочу добавлять все 24 файла, так как один набор данных является большим для обработки. Я назвал все свои наборы данных с именем «file1 file2 file3 file4 .... до файла24».SAS: создание многократных файлов из нескольких наборов данных

То, что я хочу сделать, это следующее:

  1. Например изменить формат даты во всех моих 24 файлов одновременно;

  2. Уметь извлекать из каждого файла # специальный символ запаса, такой как «Dell», и добавлять все извлеченные данные «Dell»;

  3. и, наконец, как я могу создать цикл, который позволяет мне изменить символ запаса от «Dell» на другой символ запаса в моем списке, например «Goog»? Я бы хотел, чтобы этот цикл выполнял (2) для всех моих символов.

ответ

2

Это прототип решения. Я не знаю, нужно ли делать много изменений символов. Изменит код по запросу. Не проверял, он должен работать, хотя.

%macro test(); 
%do i=1 %to 24; 
    data file&i; 
    set file&i; 
    format date [dateformat]; /*replace with the format you want */ 

proc append base=unions data=file&i(where=(stock_symbol='Dell')); 

data unions; 
set unions; 
    stock_symbol='Goog'; 

%end; 
%mend; 

%test(); run; 
3
  1. Чтобы изменить формат даты в наборе данных, это может быть плохой идеей, чтобы перебрать всех наблюдений. Стандартный синтаксис -

    proc datasets library = your_libname nolist; изменить имя_файла; format variable_name format_name; quit;

Учитывая, что Modify оператор не принимает несколько файлов SAS, вам придется обернуть его в макрос для всех 24 файлов

%macro modformats(); 
proc datasets library = <your libname> nolist; 
    %do i = 1 %to 24; 
    modify file&i; 
    format <variable name> <format name>; 
    %end; 
quit; 
%mend modformats; 
  1. Чтобы извлечь и добавить все «Dell» родственный данных, лучше всего использовать представления.

Например, необходимо сначала определить вид (обратите внимание, что не существует никакого физического набора данных называется 'all_files' создали здесь) -

data all_files/view = all_files; 
    set file1 file2... file24; 
run; 

, а затем вы можете написать -

data dell; 
    set all_files; 
    where ticker = 'DELL'; 
run; 
+0

благодаря много! вы мне это подумали: data all_files/view = all_files; превосходное !!!! – Plug4

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