Wsparcie Techniczne

SAS/ACCESS interface to PC files

Najczęstsze problemy i pytania związane z SAS/ACCESS interface to PC files

Dowiedz się więcej na temat pracy z modułem SAS/ACCESS interface to PC files oraz serwerem, który jest przez niego wykorzystywany.

Gdzie mogę znaleźć dokumentację do modułu SAS/ACCESS Interface to PC Files?

Pełna dokumentacja znajduje się na stronie support.sas.com w sekcji Knowledge Base -> Documentation. Poniżej dostępne są bezpośrednie linki dla poszczególnych wersji:

Dokumentacja jest dostępna w języku angielskim. Jeżeli SAS jest zainstalowany lokalnie na komputerze, dostęp do dokumentacji można uzyskać również z poziomu edytora SAS Base wybierając Pomoc -> Pomoc i dokumentacja SAS-a.

Co daje SAS/ACCESS Interface to PC Files?

Podstawowa wersja SAS (bez modułu SAS/ACCESS Interface to PC Files) potrafi odczytywać i zapisywać dane w następujących formatach:

  • plik tekstowy (csv, txt itp.)
  • tabela SAS (sasv7bdat)
  • plik JMP (począwszy od wersji 9.2 M3)

Moduł SAS/ACCESS Interface to PC Files dodaje obsługę formatów danych stosowanych przez popularne pakiety biurowe i inne aplikacje. Są to m.in.:

  • arkusze Microsoft Excel (xls, xlsx, xlsb oraz xlsm)
  • bazy Microsoft Access (mdb oraz accdb)
  • akusze Lotus 1-2-3 (wk1, wk3 oraz wk4)
  • bazy dBase (dbf)
  • pliki JMP (jmp) (do wersji 9.3)
  • Paradox - DB
  • SPSS - SAV
  • Stata - DTA

Czym jest SAS PC Files Server i kiedy jest wykorzystywany

SAS PC Files Server jest to samodzielna aplikacja, której zadaniem jest umożliwienie odczytu oraz zapisu plików w przypadku, gdy nie jest to możliwe do wykonania przez natywny proces systemu SAS.

Sytuacja taka może wystąpić m.in. w następujących przypadkach :

  • SAS jest zainstalowany na komputerze z systemem Linux bądź AIX
  • Na komputerze nie jest zainstalowany pakiet Microsoft Office
  • Bitowość SAS-a nie jest zgodna z bitowością pakietu Office.

Jak zainstalować i skonfigurować SAS PC Files Server?

Informacje dotyczące instalacji i konfiguracji programu SAS PC Files Server zostały opisane w dokumencie Instalacja i konfiguracja SAS PC Files Server.

Jaka jest domyślna konfiguracja SAS PC Files Server-a?

Domyślna konfiguracja programu SAS PC Files Server jest następująca:

  • port nasłuchu – 9621 (8621 w wersji dla SAS 9.2)
  • limit jednoczesnych połączeń – 10
  • szyfrowanie transmisji – wyłączone
  • autentykacja użytkownika – wyłączona

Jak używać PC Files Server-a?

SAS PC Files Server jest używany w przypadku gdy użyjemy jednej z poniższych metod:

  • LIBNAME PCFILES
  • PROC IMPORT lub PROC EXPORT z DBMS=EXCELCS lub ACCESSCS

Oto przykładowe kody wykorzystujące PC Files Server:

LIBNAME PCFSTEST PCFILES path="C:\sashelp.xlsx" SERVER="pcfs_server_host"
PORT=9621;  
PROC EXPORT DATA=SASHELP.CLASS OUTFILE="C:\sashelp.xlsx"
DBMS=EXCELCS REPLACE;
SERVER="pcfs_server_host";
PORT=9621;
RUN;

Czy PC Files Server musi być zawsze uruchomiony?

Od wersji 9.3 SAS posiada możliwość automatycznego uruchamiania lokalnej sesji PC Files Server-a na swoje potrzeby. Mechanizm ten jest używany, gdy spełnione są poniższe warunki:

  • PC Files Server jest zainstalowany na tej samej maszynie co SAS
  • W kodzie programu (instrukcji LIBNAME bądź PROC IMPORT / PROC EXPORT) nie została ustawiona opcje SERVER= ani opcja PORT=

Gdy oba wymienione warunki są spełnione, SAS na czas przetwarzania powoła lokalny process PC Files Server-a, dostępny wyłącznie dla tego uruchomienia. Po zakończeniu obliczeń proces PCFiles Server-a jest automatycznie zatrzymywany.

Przykładowe kody wykorzystujące opisywany mechanizm:

Przykładowy kod:

PROC EXPORT DATA=SASHELP.CLASS
OUTFILE="C:\sashelp.xlsx"
DBMS=EXCELCS
REPLACE;
RUN;
LIBNAME PCFSTEST PCFILES PATH="C:\sashelp.xlsx";

Szczegółowe informacje na temat opisywanego mechanizmu znajdują się tutaj.

Czy bibliotekę PCFILES można zarejestrować w metadanych?

Tak, bibliotekę PCFILES można zarejestrować w metadanych. Rejestracja przebiega w następujący sposób:

  1. Jako typ biblioteki wybieramy Generic Library
  2. Jako Engine wpisujemy pcfiles. Ścieżkę do arkusza Excel lub bazy Access podajemy w polu opcji dodatkowych w ramach opcji PATH=. Pole ścieżki należy zostawić puste. Jeżeli PC Files Server znajduje się na innym serwerze niż serwer obliczeniowy, należy dodatkowo ustawić opcje SERVER= oraz PORT=.

Po wykonaniu powyższych kroków biblioteka jest dostępna z poziomu pozostałych aplikacji SAS, takich jak SAS Enterprise Guide czy SAS Data Integration Studio.

Jak odczytywać i zapisywać dane z arkuszy Excel-a w SAS-ie?

Istnieją 3 główne metody komunikacji między Excel-em a SAS-em:

  1. LIBNAME PCFILES
  2. LIBNAME EXCEL
  3. PROC IMPORT

Poniżej znajduje się krótki opis każdej z wymienionych metod.

LIBNAME PCFILES
Metoda ta pozwala traktować plik Excel-a jak bibliotekę. Tabele w takiej bibliotece odpowiadają poszczególnym arkuszom. Metoda ta wykorzystuje PC Files Server.

Przykładowe użycie:

libname pcfstest pcfiles path="C:\sashelp.xlsx" server="localhost" port=9621;
/*zapis*/
data pcfstest.prdsale;
set sashelp.prdsale;
run;

/*odczyt*/
data prdsale;
set pcfstest.prdsale;
run;
libname pcfstest clear;

ZALETY:

  • pozwala na dostęp do arkuszy Excel-owych jak do zwykłych tabel SAS-owych
  • dostępna na wszystkich systemach operacyjnych

WADY:

  • wymagana instalacja PC Files Server-a

LIBNAME EXCEL
Podobnie jak LIBNAME PCFILES pozwala używać pliku Excel-a jak biblioteki. Sposób użycia oraz funkcjonalność są dokładnie takie same. Metoda dostępna jest jedynie, gdy SAS jest zainstalowany na systemie Windows. Dodatkowo na komputerze musi być zainstalowany pakiet MS Office lub Microsoft Access Database Engine w tej samej bitowości co SAS.

Przykładowe użycie:

libname exceltst excel "C:\sashelp.xlsx";

/*zapis*/
data exceltst.class;
set sashelp.class;
run;

/*odczyt*/
data class;
set exceltst.class;
run;

libname exceltst clear;

ZALETY:

  • pozwala na dostęp do arkuszy Excel-owych jak do zwykłych tabel SAS-owych

WADY:

  • metoda dostępna tylko w systemach Windows
  • wymaga instalacji pakietu Office lub Microsoft Access Database Engine w odpowiedniej bitowości

PROC IMPORT/EXPORT
PROC IMPORT oraz PROC EXPORT to uniwersalne procedury służące przesyłania danych między SAS a wskazanym plikiem. Format pliku ustala się za pomocą opcji DBMS. W przypadku arkuszy Excel-owych dostępne są poniższe wartości:

  • DBMS=XLS – obsługuje pliki w formacie xls (Excel 97 – 2003). Metoda ta nie wspiera polskich znaków. Dodatkowo maksymalny rozmiar tabeli jest ograniczony do 65535 wierszy. Metoda dostępna na wszystkich platformach. Nie wymaga dodatkowego oprogramowania.
  • DBMS=XLSX – obsługuje pliki w formacie xlsx (domyślny format Excel 2007 i nowszych). Metoda dostępna na wszystkich platformach. Nie wymaga dodatkowego oprogramowania.
  • DBMS=EXCEL – obsługuje wszystkie formaty Excel-a. Metoda dostępna jest jedynie na systemie Windows. Dodatkowo wymaga obecności pakietu MS Office lub Microsoft Access Database Engine w tej samej bitowości co SAS.
  • DBMS=EXCELCS – obsługuje wszystkie formaty Excel-a. Do działała wymagana jest instalacja PC Files Server.

Przykładowe użycie:

/*eksport*/
proc export outfile="C:\sashelp.xlsx"
data=sashelp.cars
dbms=xlsx;
sheet=cars;
run;

/*import*/
proc import datafile="C:\sashelp.xlsx"
out=work.cars
dbms=xlsx;
sheet=cars;
run;

ZALETY:

  • możliwość importu danych z zakresów komórek
  • dostępna na wszystkich systemach operacyjnych
  • dużo większa konfigurowalność w porównaniu z pozostałymi metodami

WADY:

  • pozawala na import / eksport pojedynczej tabeli
  • import i eksport posiadają różne opcje

Jak odczytywać i zapisywać dane z baz Access-a w SAS-ie?

Istnieją 3 główne metody komunikacji między Access-em a SAS-em:

  1. LIBNAME PCFILES
  2. LIBNAME ACCESS
  3. PROC IMPORT/EXPORT

Poniżej znajduje się krótki opis każdej z wymienionych metod.

LIBNAME PCFILES
Metoda ta pozwala traktować plik Access-a jak bibliotekę. Metoda ta wykorzystuje PC Files Server.

Przykładowe użycie:

libname pcfstest pcfiles path="C:\sashelp.accdb" server="localhost" port=9621;
/*zapis*/
data pcfstest.prdsale;
set sashelp.prdsale;
run;

/*odczyt*/
data prdsale;
set pcfstest.prdsale;
run;
libname pcfstest clear;

ZALETY:

  • pozwala na dostęp do baz Access-owych jak do zwykłych tabel SAS-owych
  • dostępna na wszystkich systemach operacyjnych

WADY:

  • wymagana instalacja PC Files Server-a

LIBNAME ACCESS
Podobnie jak LIBNAME PCFILES pozwala używać pliku Access-a jak biblioteki. Sposób użycia oraz funkcjonalność jest dokładnie taka sama. Metoda dostępna jest jedynie gdy SAS jest zainstalowany na systemie Windows. Dodatkowo na komputerze musi być zainstalowany pakiet MS Office lub Microsoft Access Database Engine w tej samej bitowości co SAS.

Przykładowe użycie:

libname acctst access "C:\sashelp.accdb";
/*zapis*/
data acctst.class;
set sashelp.class;
run;

/*odczyt*/
data class;
set acctst.class;
run;

libname acctst clear;

ZALETY:

  • pozwala na dostęp do plików Access-owych jak do zwykłych tabel SAS-owych.

WADY:

  • metoda dostępna tylko w systemach Windows
  • wymaga instalacji pakietu Office lub Microsoft Access Database Engine w odpowiedniej bitowości

PROC IMPORT/EXPORT
PROC IMPORT oraz PROC EXPORT to uniwersalne procedury służące przesyłania danych między SAS a wskazanym plikiem. Format pliku ustala się za pomocą opcji DBMS. W przypadku baz Access-owych dostępne są poniższe wartości:

  • DBMS=ACCESS – obsługuje pliki w formacie mbd oraz accdb. Wymaga dostępna wyłącznie na systemach Windows. Wymagana jest obecność pakietu MS Office lub Microsoft Access Database Engine w tej samej bitowości co SAS.
  • DBMS=ACCESSCS - obsługuje pliki w formacie mbd oraz accdb. Wymagana jest instalacja PC Files Servera. Dostępna na wszystkich systemach operacyjnych.

Przykładowe użycie:

/*eksport*/
proc export data=sashelp.cars
outtable=cars
dbms=accesscs
replace;
database='C:\sashelp.accdb';
run;
/*import*/
proc import out=cars
datatable=cars
dbms=accesscs;
database="C:\sashelp.accdb";
run;

ZALETY:

  • dostępna na wszystkich systemach operacyjnych

WADY:

  • pozawala na import / eksport pojedynczej tabeli
  • import i eksport posiadają różne opcje

Czy SAS obsługuje polskie znaki w Excel-u?

Polskie znaki są obsługiwane przez wszystkie metody za wyjątkiem PROC IMPORT i PROC EXPORT z DBMS=XLS. Obsługa polskich znaków wymaga zdefiniowania odpowiednich ustawień regionalnych dla SAS-a, w szczególności kodowania znaków. Kodowania wspierające polskie znaki to LATIN2 (ISO 8859-2) oraz WLATIN2 (Windows-1250).

Aktualne kodowanie znaków w SAS-ie jest zapisane w opcji ENCODING. Wartość tej opcji można sprawdzić wykonując poniższy kod:

proc options option=encoding;
run;

Informacja jak ustawić format kodowania znaków dla SAS-a znajduje się w dokumencie SAS 9.4 - Polonizacja w rozdziale 3.2. W przypadku wystąpienia problemów z wyświetleniem polskich znaków w bibliotekach excel-owych (LIBNAME EXCEL, EXCELSC LUB PCFILES), do instrukcji LIBNAME należy dopisać opcję UNICODE=YES.

Czy SAS obsługuje UTF-8 w Excel-u?

Obsługa kodowania UTF-8 wymaga SAS-a działającego w trybie Unicode. Tryb ten można rozpoznać na podstawie wartości opcji DBCS oraz ENCODING. Wartość wymienionych opcji można sprawdzić wykonując poniższy kod:

Aktualne kodowanie znaków w SAS-ie jest zapisane w opcji ENCODING. Wartość tej opcji można sprawdzić wykonując poniższy kod:

proc options group=languagecontrol;
run;

Jeżeli korzystamy z metody używającej PC Files Server (np. LIBNAME PCFILES) do instrukcji LIBNAME należy dodać opcję UNICODE=YES.

Przykładowe użycie:

LIBNAME test PCFILES PATH="C:\sashelp_utf8.xlsx" UNICODE=YES;

Czy SAS może modyfikować zawartość arkusza Excel-owego?

SAS pozwala na następujące operacje na danych w arkuszu Excel-owym:

  • Tworzenie i usuwanie arkuszy.
  • Dodawanie nowych wierszy do istniejących arkuszy.

Z poziomu SAS nie ma możliwości wykonania następujących operacji:

  • Usuwanie wierszy z arkusza
  • Modyfikacja istniejących wierszy w arkuszu

Próba wykonania którejś z powyższych operacji skutkuje błędem. Dokładny komunikat błędu zależy od wykonywanej procedury i wybranego sposobu dostępu do danych.

Dlaczego plik XLSX utworzony w SAS-ie nie działa w Excel-u?

Problem występuje najczęściej gdy plik XLSX został utworzony przy pomocy PROC EXPORT z DBMS=EXCELCS. Problem ten leży w komponentach firmy Microsoft, wykorzystywanych przez PC Files Server. Błąd ten powoduje utworzenie pliku XLSB zamiast żądanego formatu XLSX.

Rozwiązaniem problemu jest zmiana rozszerzenia utworzonego pliku z XLSX na XLSB.

Czy SAS może tworzyć pliki Access-a?

Nie, SAS nie potrafi tworzyć plików baz danych MS Access.

Jak kontrolować dostęp do plików przez PC Files Server?

Domyślnie kontrola dostępu w SAS PC Files Server jest wyłączona. W tym trybie aplikacja wykonuje wszystkie operacje z uprawnieniami użytkownika który ją uruchomił (jako proces) bądź w uprawnieniami systemu (jako usluga). Po włączeniu opcji kontroli dostępu (instrukcja znajduje się w dokumencie Instalacja i konfiguracja SAS PC Files Server) program działa następująco:

  • użytkownik podczas dostępu do danych musi podać swój login i hasło.
  • podczas dostępu do wybranego pliku aplikacja używa dostarczonego loginu i hasła.

UWAGA! Jeżeli SAS PC Files Server jest uruchamiany jako proces, użytkownik dokonujący uruchomienia musi mieć poniższe uprawnienia aby kontrola dostępu działała poprawnie:

  • Użytkownik musi należeć do grupy Administratorów.
  • Działanie jako część systemu operacyjnego (Act as part of the operating system).
  • Dostosuj przydziały pamięci dla procesów (Adjust memory quotas for a process).
  • Zamień token na poziomie procesu(Replace a process level token).
  • Logowanie w trybie wsadowym (Log on as batch job).

Szczególowe listy wymagań znajdują się na ponatych stronach: SAS 9.2 , SAS 9.3, SAS 9.4.

Jak szyfrowana jest komunikacja pomiędzy użytkownikiem a PC Files Server-em?

Domyślnie komunikacja między sesją SAS-a a PC Files Server-em nie jest szyfrowana.

Po włączeniu szyfrowania komunikacja między serwerem a klientem jest szyfrowana za pomocą własnościowego algorytmu szyfrującego w SAS (SAS Proprietary Encryption).

Najczęstsze komunikaty błędów.

Komunikat błędu
Znaczenie
ERROR: A socket routine returned error: The connection was refused.
ERROR: Failed to connect to the Server: localhost.
PC Files Server nie jest uruchomiony na podanym serwerze lub podano błędną nazwę hosta lub port.
CLI error trying to establish connection: [Microsoft][ODBC Excel Driver] Cannot open database '(unknown)'. It may not be a database that your application recognizes, or the file may be corrupt.
Nie można uzyskać dostępu do pliku. Plik jest otwarty w innym programie bądź jest zajęty przez inną sesję SAS.
CLI error trying to establish connection: [Microsoft][ODBC Excel Driver]General error. Unable to open registry key Temporary (volatile) Ace DSN for process 0x490 Thread 0xbbc DBC 0x3bb7fdc Excel'. ERROR: Error in the LIBNAME statement.
Brak uprawnień do zajęcia pliku. Problem może też być spowodowany brakiem opcji SERVER= i PORT= w przypadku definicji biblioteki w metadanych.
Connect: Klasa niezarejestrowana.
Bitowość SAS-a nie odpowiada bitowości pakietu MS Office lub komponentu Microsoft Access Database Engine. Należy użyć metodę wykorzystująca PC Files Server.
A socket routine returned error: The connection was refused.
Problem połączenia z serwerem. Należy upewnić się że PC Files Server jest uruchomiony, podane zostały właściwe opcje połączenia (zwłaszcza SERVER= oraz PORT=) oraz że komunikacja nie jest blokowana przez oprogramowanie typu firewall. Więcej szczegółów można znaleźć w nocie SAS-owej nr 48479.
Unable to transcode data to/from UCS-2 encoding.
Próba użycia biblioteki podpiętej za pomocą instrukcji libname z opcją unicode=yes w sesji nie korzystającej z kodowania Unicode. Rozwiązaniem jest uruchomienie sesji SAS-a z opcjami -dbcs -encoding utf8.
CLI prepare error: [Microsoft][ODBC Excel Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. SQL statement: SELECT * FROM `$`.
SAS uruchomiony w wersji UTF-8, brak opcji unicode=yes w instrukcji LIBNAME.
Error allocating CLI environment.
Jeżeli komunikat występuje podczas próby zalogowania (połączenie ze zdefiniowanymi opcjami serveruser oraz serverpass) oznacza to brak wymaganych uprawnień dla użytkownika, na którego koncie działa PC Files Server (patrz pytanie Jak kontrolować dostęp do plików przez PC Files Server?).
CLI error trying to establish connection: [Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed.
W systemie zostały zainstalowane jednocześnie sterowniki ACE w wersji 32 oraz 64-bitowej. Rozwiązaniem jest usunięcie jednej z wersji.
CLI error trying to establish connection: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.

Microsoft Office bądź Microsoft Access Database Engine został odinstalowany na maszynie, na której znajduje się PC Files Server. Rozwiązaniem jest ponowna instalacja jednego z wymienionych programów.

Unable to cast COM object of type 'Microsoft.Office.Interop.Outlook.ApplicationClass' to interface type 'Microsoft.Office.Interop.Outlook._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063001-0000-0000-C000-000000000046}' failed due to the following error: Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

Problem może się pojawić się po instalacji nowszej wersji pakietu Office. Wynika on z błędów w rejestracji wybranych komponentów w rejestrze Windows. Zalecane rozwiązanie to przeinstalowanie pakietu Office.

Możliwa jest również ręczna poprawa zapisów w rejestrze. Szczegółowe informacje jak to zrobić znajdują się tutaj.

Gdzie mogę znaleźć więcej informacji?

Więcej informacji na temat możliwości oferowanych przez PC Files Server można znaleźć w dokumentacji komponentu SAS/ACCESS Interface to PC Files. Informacja gdzie ją znaleźć znajduje się w pytaniu Gdzie mogę znaleźć dokumentację do modułu SAS/ACCESS Interface to PC Files?.

Szczególnie przydatne są wymienione rozdziały (linki dotyczą dokumentu dla SAS 9.4):

Przydatne dokumenty: