2013-04-08 1 views
0

Я пытаюсь импортировать несколько файлов excel, используя приведенный ниже код. В каждом файле excel есть столбец, который имеет как числовые, так и текстовые значения, но импорт proc импортирует только числовые значения и помещает текстовые значения как пустые ('.').Proc Import. Импорт значений символов как «Пусто» из файлов excel

Может ли кто-нибудь помочь мне в этом вопросе? Большое спасибо.

%let subdir=S:\Temp\; 

filename dir "&subdir.*.xls"; 

data new; 

length filename fname $ 32767; 

infile dir eof=last filename=fname; 

input ; 

last: filename=fname; 

run; 

proc sort data=new nodupkey; 

by filename; 

run; 

data null; 

set new end=last; 

call symputx(cats('filename',_n_),filename); 

call symputx(cats('dsn',_n_),scan(scan(filename,7,'\'),1,'.')); 

if last then call symputx('nobs',_n_); 

run; 

%put &nobs; 

%macro import; 

%do i=1 %to &nobs; 


proc import datafile="&&filename&i" out=&&dsn&i 

dbms=excel replace; 

sheet = "Sheet1"; 

getnames=yes; 

mixed=yes; 

run; 


%end; 

%mend import; 

%import 

ответ

0

Смешанный = Да должен исправить вещи для вас, но если это не так, то есть несколько решений.

Прежде всего, вы можете проверить свое значение сканирования. Вы можете увидеть один из возможных вариантов расположения здесь: http://support.sas.com/kb/35/563.html

HKEY_LOCAL_MACHINE ► Программное обеспечение ► Microsoft ► Бюро ► 12.0 ► Connectivity Access Engine ► Двигатели

Если у вас старая версия офиса (до 2007), это называется «JET Engine» и находится в несколько другом месте (вы можете использовать его для Google). Ваш «12.0» может отличаться в зависимости от того, что вы установили (12.0 - Office 2007).

Во-вторых, вы можете заставить столбцы быть конкретными типами. Опция DBSASTYPE - это то, где вам нужно это делать; см., например, http://www2.sas.com/proceedings/sugi31/020-31.pdf (примерно в середине документа, поиск DBSASTYPE).

1

Лучший способ управления типом данных в импортированной книге Excel - использовать параметр набора данных DBSASTYPE с именем lib. Это особенно полезно при работе с другими типами данных (например, значения времени и времени).

Например, предположим, что пострадавший колонок называется my_var и всегда следует рассматривать как характер с максимальной длиной 30. И давайте также предположит, у вас есть столбец электронной таблицы с именем START_TIME, содержащий Excel кодированного дата и время. Ваш макрос может быть пересмотрен, как это:

libname x "&&filename&i"; 
data &&dsn&i; 
    set x.'Sheet1$'n(dbsastype=(MY_VAR=char30 START_TIME=datetime)); 
run; 
libname x clear; 

Пока вы знаете имя столбца Excel вызывает проблемы, это должно работать хорошо.

+0

Спасибо за отзыв. Я все еще получаю значения символов как пробелы в SAS. – datacentric