В предыдущем статья Мы познакомились с понятием библиотеки SAS, узнали, как назначить библиотеку файлу Excel, а также узнали о процедуре создания детализированных отчетов.
Напоминаю, что скачать программу можно по адресу сайт САС , ссылка на документацию по установке SAS UE представлена в статья №1 .
В этой статье вы узнаете несколько способов чтения текстовых файлов.
Все примеры основаны на файлах, которые хранятся в каталоге c:\workshop\habrahabr и заранее созданы в Блокноте.
Чтобы создать набор данных SAS из текстового файла, первый из них необходимо проанализировать, чтобы правильно выбрать тип чтения текстового файла.
Текстовый файл может содержать как стандартные, так и нестандартные данные.
Стандартные данные — это данные, которые SAS считывает без каких-либо инструкций, например, значение переменной Salary в текстовом файле сохраняется как 12355,44 или дата уже записана как стандартная дата SAS ( см.
Урок 1 ).
А если вам нужно обработать значение, например, $12 355,44 или 01.01.2018, то вам нужно указать правило чтения, инструкцию, по которой эти значения преобразуются в формат SAS. В этой статье кратко описывается, как использовать оператор INPUT для преобразования необработанных данных в наборы данных SAS.
Чтение текстового файла со стандартными данными с разделителями.
Давайте рассмотрим простой пример текстового файла.
Файл менеджеры1.dat представляет собой текстовый файл, разделенный запятыми, и выглядит следующим образом:
Новый набор данных SAS должен содержать следующие переменные: идентификатор, имя, фамилия, должность, страна, пол, зарплата.
Вы можете заметить, что данные, хранящиеся в этом файле, стандартны и SAS читает их без проблем.
Чтение текстового файла реализуется с помощью операторов INFILE и INPUT на этапе DATA. Подробно оператор INFILE можно изучить в справочнике.
Формулировки шагов SAS 9.4 DATA: справка .
Инструкция INFILE указывает внешний файл для чтения.
Общий синтаксис оператора:
спецификация файла – идентифицирует источник данных, это может быть внешний файл или ссылка на внешний файл.INFILE file-specification<device-type><options><operating-environment-options>;
тип устройства – метод доступа.
параметры - действительные варианты.
параметры операционной среды – параметры рабочей среды.
В нашем конкретном случае оператор INFILE будет записан следующим образом: infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
ДЛМ= (или разделитель=) — это опция оператора INFILE, которая указывает альтернативный разделитель (пробел — разделитель по умолчанию), который будет использоваться для чтения внешнего файла.
Список разделителей указывается в двойных кавычках.
После того, как мы установили путь, нам нужно установить имена переменных.
Оператор поможет нам решить эту проблему ВХОД .
Общий синтаксис оператора INPUT: INPUT <specification(s)> <@ | @@>;
Характеристики) – может включать в себя переменные, списки переменных, атрибут типа текста ($), указатель-управление, спецификацию столбца, форматы чтения и т. д. (подробнее в справочнике) Формулировки шагов SAS 9.4 DATA: справка ).
@ — спецификатор удержания строки.
Оператор INPUT в нашем случае запишется так: input ID First_Name $ Last_Name $ Job_Title $ Country $ Gender $ Salary;
Опять же, чтение текстового файла происходит на этапе ДАННЫЕ, поэтому код, необходимый для чтения текстового файла, будет выглядеть следующим образом: data managers;
infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
input ID First_Name $ Last_Name $ Job_Title $ Country $ Gender $ Salary;
run;
Мы создаем временный набор данных SAS, называемый менеджерами, который будет храниться в библиотеке WORK до тех пор, пока сеанс SAS не будет закрыт ( см.
Урок 2 )
Давайте проверим, корректно ли работает код. Запустим программу и проверим журнал:
Давайте распечатаем набор данных: proc print data=managers;
run;
Результат шага PROC PRINT:
Обратите внимание, что текстовые значения в некоторых столбцах обрезаны.
Запустим процедуру PROC CONTENTS, чтобы определить длину созданных переменных: proc contents data=managers varnum;
run;
Опция VARNUM отображает переменные в том порядке, в котором они хранятся в таблице.
Фрагмент вывода процедуры:
Переменная длина
По умолчанию SAS Base создает переменные любого типа длиной 8 байт. Чтобы избежать «усеченных» значений, длину необходимо указывать явно.Эту задачу легко решить с помощью оператора ДЛИНА .
Важно знать, что этот оператор должен быть написан перед оператором INPUT; это связано с особенностями работы SAS Base.
Итак, наш код с использованием оператора LENGTH будет выглядеть так: data managers;
infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
length First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1;
input ID First_Name Last_Name Job_Title Country Gender Salary;
run;
proc print data=managers;
run;
proc contents data=managers varnum;
run;
Мы указали тип переменной в операторе LENGTH, поэтому просто перечислили имена переменных в INPUT. Обратите внимание, что оператор INPUT перечисляет переменные в том порядке, в котором они появляются в исходном коде!
Запустим программу и посмотрим результаты:
Результат шага PROC PRINT:
Результат выполнения PROC CONTENTS:
Переменные отображаются в другом порядке.
Это связано с тем, что SAS Base считывает всё последовательно: сначала вводятся переменные из оператора LENGTH, и только потом проверяется INPUT, а набор данных дополняется переменными ID и Salary. Чтобы отображать столбцы в исходном порядке, мы можем явно установить длину переменных ID и Salary в операторе LENGTH. Минимальная длина числовых переменных составляет 3 байта, но имейте в виду, что изменение длины числовой переменной на меньшее значение может привести к потере точности числовых значений.
Таким образом, программа принимает следующий вид: data managers;
infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
length ID 8 First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1 Salary 8;
input ID First_Name Last_Name Job_Title Country Gender Salary;
run;
proc print data=managers;
run;
Постоянные атрибуты.
На этапе ДАННЫЕ мы зададим переменным постоянные атрибуты: формат и метку.
В этом случае атрибуты будут записаны в дескриптор выходного набора данных и будут использоваться на каждом этапе PROC. data managers;
infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
length ID 8 First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1 Salary 8;
input ID First_Name Last_Name Job_Title Country Gender Salary;
label
Теги: #sas base #Base SAS Software #имя библиотеки #proc print #proc Step sas #sas 9.4 #programming
-
Уязвимость Локального Корня Linux 3.8
19 Oct, 24