#sas #date-formatting #datastep
#sas #форматирование даты #datastep
Вопрос:
Я работаю над назначением, и мне не разрешено использовать PROC SQL. Я одновременно импортировал данные из двух файлов csv и переименовал столбцы (см. Код ниже), но когда я попытался добавить две таблицы, возникла проблема с форматом даты. Когда я ОБРАБАТЫВАЮ СОДЕРЖИМОЕ, я получаю следующую информацию:
Work.2019data: Переменная:Тип даты: Число Длина: 8 Формат / Информация: MMDDYY10 Когда я открываю этот файл в блокноте, даты выглядят следующим образом: 31.12.2019
Для второй таблицы:
Work.2020data: Переменная: Тип даты: Длина числа:8 Формат / Информация: YYMMDD10 Но когда я открываю этот файл в блокноте, даты выглядят так: 2020-11-16
PROC IMPORT
DATAFILE= "amp;export_mtl/2019data.csv"
OUT= WORK.2019data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
PROC IMPORT
DATAFILE= "amp;export_mtl/2020data.csv"
OUT= WORK.2020data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
Какой самый простой способ привести дату в таблицу 2020data, чтобы я мог объединить две таблицы после? Я видел так много способов сделать это и попробовал их, но безуспешно.
Комментарии:
1. Почему вы используете PROC IMPORT для чтения текстового файла? Просто напишите свой собственный шаг данных, чтобы прочитать файл (ы). Затем вы можете контролировать, какие форматы привязаны к переменным, и какие имена используются для переменных. Шаг данных, вероятно, в конечном итоге будет содержать меньше кода, чем шаги импорта proc.
2. Мой профессор специально попросил, чтобы мы использовали PROC IMPORT для импорта 3 файлов CSV — у меня не было выбора.
Ответ №1:
Если вы объединяете два набора данных, которые имеют одну и ту же переменную, то формат по умолчанию, прикрепленный к переменной, будет первым не пропущенным форматом, который видит компилятор шага данных. Итак, для вашего примера, если вы запустите
data want;
set '2019data'n '2020data'n ;
run;
затем MMDDYY10. будет использоваться формат. Но если вы измените порядок ссылок на входные наборы данных
data want;
set '2020data'n '2019data'n ;
run;
затем YYMMDD10. будет использоваться формат.
Но если вы добавите инструкцию FORMAT к шагу data, вы сможете контролировать, какой формат будет прикреплен к новому набору данных. Поэтому, если вы использовали:
data want;
set '2020data'n '2019data'n ;
format date date9.;
run;
Теперь стиль по умолчанию, который будет использоваться для отображения значений нужной ДАТЫ, будет ddmonyyyyy.
Ответ №2:
Если вы просто хотите объединить оба файла, вы можете перейти к шагу с данными. Он выполнит задачу, присвоив второму набору данных те же форматы, что и первому:
data data_2019_2020;
set 2019data 2020data;
run;
Если вы хотите изменить формат даты, вы также можете сделать это с помощью datastep. Например:
data data_2019_2020;
set 2019data 2020data;
FORMAT date YYMMDD10.;
run;
Или, если вы предпочитаете, вы можете сначала изменить только один набор данных, а затем использовать PROC APPEND
для стекирования.
Комментарии:
1. Привет, Луис! Спасибо, что нашли время ответить. Оба метода работают на основе выходных данных, но не сохраняют файлы с накоплением в новый набор данных. Моя ошибка, я забыл добавить это в свой первоначальный вопрос.
2. @Earl, методы сохраняют файл с накоплением в новом наборе данных. Я назвал набор данных как
data_2019_2020
. Но вы можете изменить его на имя, которое вы предпочитаете. Загляните в свой рабочий каталог, там будут файлы, начинающиеся сdata_
, файл. Если вам нужна другая библиотека, вам просто нужно указать ее: (например:mydata.data_2019_2020
сохранить ее в ранее определенной библиотеке с именемmydata
)3. Я понял примерно через 10 минут после публикации… большое вам спасибо!!