2017-02-10 18 views
0

самообучающийся пользователь SAS здесь.SAS переименование переменных во время ввода

Я часто работаю с наборами данных, которые у меня мало контролируются и разделяются между несколькими разными пользователями.

Я обычно читал в файлах как CSVs, используя инструкцию infile +, определяющую переменные с блоками информации, формата и ввода. Во время этого процесса я могу продолжить и переименовать переменные - при условии, что все переименовано в правильном порядке - или они должны соответствовать исходному набору данных и быть переименованы на более позднем этапе данных?

Например, имя переменной в наборе данных «100% полностью оплачено». Я знаю, что переменные SAS не могут начинаться с цифр, и я хотел бы также упростить имена переменных в общем, так я мог сделать что-то вроде следующего:

infile statement... 
informat Paid $3.; 
format Paid $3.; 
input Paid $; 
run; 

Или, может быть, я буду об этом очень нерационально. Я пробовал делать простой импорт proc без этого всего бизнеса informat/format/input, но я обнаружил, что попытка переопределить типы переменных впоследствии вызывает больше головной боли для меня (на всех наборах данных, с которыми я работаю, есть комбинации текста, долларов, проценты, общие числа, даты ...). В любом случае, другие советы получили высокую оценку - спасибо!

EDIT

Может быть, вопрос, который я должен спросить это: существует ли какой-либо способ сохранить формат CSV для долларов и проценты (за счет импорта Proc, который, кажется, чтобы преобразовать их в символы)? Я знаю, что я могу вручную изменить форматы от долларов/процентов до «общего» в Excel до импорта файла, но я бы предпочел избегать дополнительных ручных шагов, а также потому, что я действительно хочу сохранить их в виде долларов и процентов. Или мне просто лучше делать informat/format/input для указания типов данных для csv, так что переменные читаются точно, как я хочу, чтобы их читали?

Примечание: Мне не удалось обработать импорт файлов xls или xlsx либо из-за того, что я на 64-разрядном компьютере, либо у меня отсутствуют необходимые драйверы (или оба). Я никогда не мог это сделать даже на 32-битном компьютере.

+0

Спасибо за ответ так быстро, Том. Я не уверен, что полностью понимаю, но я собираюсь изменить свой первоначальный вопрос. – jh1021

+0

Я думаю, что ответ Тома по-прежнему применяется. Возможно, если бы вы могли привести пример CSV (как текст в окне программы, а не изображение), достаточно всего нескольких записей, и кто-то может показать вам точный код, который вам нужен, чтобы прочитать пример, и вы можете экстраполировать его на свои CSV. –

+0

Нет, нет более быстрого способа, который бы дал вам такую ​​же точность. Ручное управление лучше. Одна вещь, которую вы можете сделать, если вы часто это делаете, - создать формат файла спецификации, который вы можете создать, в Excel или CSV, который определяет форматы/информацию, типы, длины, имена, а затем создает макрос для использования спецификации файл для импорта ваших данных. – Reeza

ответ

2

Файлы CSV не содержат метаданных о типах переменных, как показывает ваша заметка о попытке импортировать их в Excel. Вы можете использовать PROC IMPORT для того, чтобы SAS получил обоснованное предположение о том, как их читать, но ответ может варьироваться от файла к файлу на основе конкретных значений данных, которые появляются.

Если у вас есть данные в файлах XLS или XLSX, вы можете прочитать их непосредственно в SAS, используя libname с движком XLS или XLSX. Это не использует Excel и поэтому не имеет конфликтов между установкой 32 и 64. На самом деле вам даже не нужен Excel. SAS лучше справится с определением типов переменных из файлов Excel, чем из файлов CSV, но поскольку Excel - это электронная таблица свободной формы, у вас все еще могут отсутствовать согласованные типы переменных для одной и той же переменной для нескольких файлов. С электронной таблицей Excel вы можете даже не иметь одинаковый тип данных в одном столбце одного листа.

Вам лучше написать свой собственный шаг данных, чтобы прочитать файл. Таким образом, вы можете обеспечить согласованность.

Что я обычно делаю, когда задано CSV-файл, копирует имена из первой строки и использует его для создания инструкции LENGTH. Это определит переменные и задает порядок переменных. В этот момент вы можете дать переменным новые имена.

length paid $3 date amount 8 ; 

Тогда для переменных, которые требуют Informat для чтения правильно ли я добавить INFORMAT заявление. Обычно это необходимо только для переменных даты/времени, но также может потребоваться, если числовые значения включают запятые или знаки процента. Информационный файл DOLLAR. полезен, если ваш CSV-файл имеет номера, отформатированные разделителями $ и/или тысяч.

informat date mmddyy. amount dollar. ; 

Тогда для переменных, которые требуют FORMAT будет отображаться правильно добавить FORMAT заявление. Обычно это необходимо только для переменных даты/времени. Это необходимо только для символьных переменных, если вы хотите присоединить $ CHAR. формат для сохранения ведущих пространств.

format date yymmdd10. ; 

INPUT Тогда утверждение действительно легко, так как вы можете использовать позиционный список переменного. Обратите внимание, что нет необходимости включать информацию или $ в инструкцию INPUT, поскольку типы уже определены оператором LENGTH.

input paid -- amount ;