2010-03-03 3 views
9

У меня много файлов в формате SAS, и я хотел бы иметь возможность читать их в программах вне SAS. У меня нет ничего, кроме базовой системы SAS. Я мог бы вручную преобразовать каждый из них, но я хотел бы сделать это автоматически.Как я могу прочитать набор данных SAS?

+0

Какие программы/форматы вы хотите, чтобы прочитать его в? С каким языком программирования вы будете работать? –

+0

Я использую Python. Я не указывал программу или формат, потому что я не хотел ограничивать ответы; если есть способ прочитать данные через DLL или API, я уверен, что смогу понять, как назвать это. Но я не могу найти способ сделать это, не лицензируя дополнительные программы от SAS. –

+0

Будет ли писать макрос SAS для преобразования каждого счета в качестве автоматического решения? –

ответ

6

Вам необходимо будет иметь сеанс SAS для работы в качестве сервера данных. Затем вы можете получить доступ к данным SAS с использованием ODBC, см. SAS ODBC drivers guide.

Чтобы получить локальный сервер работает SAS ODBC, вам необходимо:

  1. Определите настройки сервера SAS ODBC на описанные в руководстве драйверов SAS ODBC. В следующем примере я подключусь к серверу, который настроен с именем «loclodbc».
  2. Добавить запись в файле служб, (C: \ WINDOWS \ system32 \ Drivers \ Etc \ Services), например:

    • loclodbc 9191/TCP

    ... набор номер порта (здесь: 9191), чтобы он соответствовал вашей локальной настройке. Имя службы «loclodbc» должно совпадать с именем сервера, как определено в настройке ODBC. Обратите внимание, что термин «Сервер» не имеет ничего общего с физическим именем компьютера.

Ваш сервер SAS ODBC теперь готов к запуску, но не имеет назначенных ресурсов данных. Обычно вы должны установить это на вкладке «Библиотеки» в процессе установки SAS ODBC, но поскольку вы хотите указывать на источники данных «на лету», мы опускаем это.

С вашего клиентского приложения теперь вы можете подключиться к серверу SAS ODBC, указать на ресурсы данных, к которым вы хотите получить доступ, и получить данные.

Способ, которым SAS указывает на ресурсы данных, - это концепция «LIBNAME». Libname является логическим указателем на набор данных.

Таким образом

LIBNAME sasadhoc 'C:\sasdatafolder'; 

назначает папку "C: \ sasdatafolder" логическая ручка "sasiodat".

Если внутри SAS хотят получить доступ к данным, хранящимся в файле таблицы данных SAS «C: \ sasdatafolder \ test.sas7bdat», вы могли бы сделать что-то вроде этого:

LIBNAME sasadhoc 'C:\sasdatafolder'; 
PROC SQL; 
    CREATE TABLE WORK.test as 
    SELECT * 
    FROM sasadhoc.test 
    ; 
QUIT; 

Так что нам нужно чтобы сообщить нашему серверу SAS ODBC о назначении имени lib для C: \ sasdatafolder из нашего клиентского приложения. Мы можем сделать это, отправив этот запрос на распределение ресурсов при запуске, используя параметр DBCONINIT.

Я сделал несколько примеров кода для этого. Мой пример кода также написан на языке BAS SAS. Поскольку, очевидно, есть более умные способы доступа к данным SAS, чем SAS, подключающиеся к SAS через ODBC, этот код служит только примером.

Вы должны быть в состоянии принять полезные биты и создать собственное решение в среде программирования вы используете ...

SAS ODBC образец соединения код:

PROC SQL; 
    CONNECT TO ODBC(DSN=loclodbc DBCONINIT="libname sasadhoc 'c:\sasdatafolder'"); 
    CREATE TABLE temp_sas AS 
    SELECT * FROM CONNECTION TO ODBC(SELECT * FROM sasadhoc.test); 
QUIT; 

Магия происходит в часть «CONNECT TO ODBC ...» кода, назначая libname папке, в которой находятся данные.

+0

На самом деле, вам не нужна работающая сессия SAS; драйвер ODBC автоматически запустит его для вас. Однако нет простого способа программно создать конфигурацию ODBC, поэтому ее необходимо настроить вручную. Это проблема, поскольку вы не можете просто загрузить произвольный набор данных. –

+0

Любопытно, что вы, вероятно, имеете в виду «где угодно, с любым именем» ...? Или он задан как параметр? –

+0

Расположен в любом месте, с любым именем. –

2

Я думаю, вы сможете использовать ADO, Для получения более подробной информации см. SAS support site.

Отказ от ответственности:

  1. Я не смотрел на это некоторое время
  2. Я не 100% уверен, что это не требует дополнительного лицензирования
  3. Я не уверен, если вы может сделать это с помощью Python
2

Я никогда не пробовал http://www.oview.co.uk/dsread/, но это может быть то, что вы ищете: «простую утилиту командной строки для работы с наборами данных в формате SAS7BDAT файла.» Но обратите внимание: «Это программное обеспечение следует считать экспериментальным и не гарантированно быть точным, вы используете его на свой страх и риск. Он будет работать только на несжатых файлах SAS7BDAT в формате Windows».

3

Вы можете сделать программу преобразования SAS-CSV.

Сохранить следующее sas_to_csv.sas:

proc export data=&sysparm 
    outfile=stdout dbms=csv; 
run; 

Тогда, если вы хотите получить доступ к libname.dataset, вызовите эту программу следующим образом:

sas sas_to_csv -noterminal -sysparm "libname.dataset" 

Данные SAS конвертируется в формат CSV, который может быть передан по конвейеру в Python. В Python было бы легко создать программные параметры «libname.dataset».

4

Там теперь питон пакет, который позволит вам читать .sas7bdat файлы или конвертировать их в формат CSV, если вы предпочитаете

https://pypi.python.org/pypi/sas7bdat

Смежные вопросы