У меня есть куча данных временных рядов (файлы sas), которые мне нравится объединять/объединять в большую таблицу (я новичок в SAS).
Имена файлов: cq_ts_SYMBOL, где SYMBOL — соответствующий символ для каждого файла.
со следующей структурой:
cq_ts_AAA.sas7bdat: файл1
SYMBOL DATE TIME BID ASK MID
AAA 20100101 9:30:00 10.375 10.4 .
AAA 20100101 9:31:00 10.38 10.4 .
.
.
AAA 20150101 15:59:00 15 15.1 .
cq_ts_BBB.sas7bdat: файл2
SYMBOL DATE TIME BID ASK MID
BBB 20120101 9:30:00 12.375 12.4 .
BBB 20120102 9:31:00 12.38 12.4 .
.
.
BBB 20170101 15:59:00 20 20.1 .
Основные характеристики: - У них одинаковое имя переменной - У них разное количество наблюдений - Все они сохраняются в одной папке
Итак, что я хочу сделать, это: - Создать 3 таблицы: BID-table, ASK-table, Mid-table со следующей структурой, т.е. для bid-table, cq_ts_bid.sas7bdat:
DATE TIME AAA BBB ...
20100101 9:30:00 10.375 .
20100102 9:31:00 10.38 .
.
.
20120101 9:30:00 9.375 12.375
20120102 9:31:00 9.38 12.38
.
.
20150101 15:59:00 15 17
.
.
20170101 15:59:00 . 20
Это не так сложно сделать для 2 фондовых временных рядов, однако мне было интересно, есть ли возможность сделать следующее:
- Из набора данных cq_ts_AAA возьмите DATE TIME BID и переименуйте BID в AAA (либо из значений в символе? Имеет ли это смысл? Или получить имя из имени файла).
- Сделайте то же самое для cq_ts_BBB.
- На самом деле, прокрутите папку, чтобы получить количество файлов и имена файлов (эта часть у меня более-менее, см. ниже).
- Объединить cq_ts_BBB и cq_ts_BBB, имеющие ДАТУ ВРЕМЯ AAA (прежняя цена предложения AAA) BBB (прежняя цена предложения BBB), для всех файлов в папке.
- Сделайте это для BID, затем для ASK и, наконец, для MID (на самом деле я не смог получить переменную средней точки из bid и ask (т.е. mid= (bid + ask)/2;) просто дает мне «.» в предыдущих шагах данных при создании файлов).
Я думаю, что макрос сначала получает каждый отдельный файл, затем переименовывает его (когда должен выполняться этот шаг?) и объединяет их вместе - как двойной цикл.
Здесь часть переименования и слияния:
data ALDW_short (rename=(iprice = ALDW));
set output.cq_ts_aldw
retain date time ALJ;
run;
data ALJ_short (rename= (iprice = ALJ));
set output.cq_ts_alj;
retain date time datetime ALJ;
run;
data ALDW_ALJ_merged (keep= date itime ALDW ALJ);
merge ALDW_short ALJ_short;
by datetime;
run;
Это часть цикла по папке и получения списка имен:
proc contents data = output._all_ out = outputcont(keep = memname) noprint;
run;
proc sort data = outputcont nodupkey;
by memname;
run;
data _null_;
set outputcont end = last;
by memname;
i+1;
call symputx('name'||trim(left(put(i,8.))),memname);
if last then call symputx('count',i);
run;
Имеет ли смысл извлекать символ (и как? у них разная длина) из имени файла или просто брать их из переменной SYMBOL (и как мне получить одно значение для переименования моего столбца?)?
Как-то у меня возникают трудности с изменением порядка столбцов, т.е. Я пробовал с сохранением и форматированием.