|
|
Makrozmienna w makrze
W makroprogramie wyliczam makrozmienną. Niestety dostaję komunikat WARNING: Apparent symbolic reference L_OBS not resolved.
Najprawdopodobniej makrozmienna w programie nie została zadeklarowana jako makrozmienna globalna. Domyślnie wszystkie makrozmienne tworzone w ramach makroprogramu są lokalne.
Przykład działającego programu
%macro lobs(dset);
%global L_OBS;
proc sql noprint;
select count(*) into :L_OBS from &dset;
quit;
%mend;
%lobs(sashelp.air);
%put &L_OBS
|

|
|
|
W jaki sposób odczytać wartość zmiennej środowiskowej?
Do odczytania wartości zmiennej środowiskowej służy m.in. funkcja sysget() i makro funkcja %sysget().
Przykładowo:
data _null_;
x=sysget('TMP');
put x;
run;
%let OS_NAME=%sysget(OS);
%put &OS_NAME;
|

|
|
|
W jaki sposób użyć makrozmiennej SYSDATE?
Przykład:
options yearcutoff = 1920 ;
data _null_ ;
date = input("&sysdate",date7.) ;
put date ddmmyy10. ;
run ;
|

|
|
|
Jak zmienić tytuł w Output?
Domyślnie przy wykonywaniu poleceń na górze strony drukowany jest tytuł "The SAS System". Można wyłączyć tą opcję specyfikując TITLE;. Możemy również usunąć drukowanie daty i numerów stron przez użycie opcji NODATE i NONUMBER.
|

|
|
|
Jak użyć makra by sprawdzić czy zbiór istnieje?
Zmienna exist będzie ustawiona na 1 jeśli zbiór istnieje lub na zero jeśli nie.
%let exist=%sysfunc(exist(nazwa_zbioru));
|

|
|
|
Maksymalna długość makrozmiennej.
Wartość ta zależy od platformy sprzętowej, zwykle jest to 32767 bajtów dla wersji 6 oraz 65534 dla następnych.
|

|
|
|
Jak usunąć globalne makrozmienne zdefiniowane przez użytkownika?
Można do tego użyć makro funkcji %SYMDEL w następujący sposób
Aby usunąć wszystkie globalne makrozmienne użytkownika można użyć kodu:
%macro delvars; data vars;
set sashelp.vmacro;
run;
data _null_;
set vars;
if scope='GLOBAL' then
call execute('%symdel '||trim(left(name))||';');
run;
%mend;
%delvars
|

|
|
|
Jak otworzyć zbiór zawierający kolumny z nałożonymi formatami, których nie posiadamy?
Przed otwarciem należy ustawić opcję options nofmterr;
|

|
|
|
Jak debugować działanie data-stepu?
Należy dodać opcję "/debug", jak w przykładzie poniżej:
data zbior / debug;
...
run;
|

|
|
|
Jakiego formatu użyć aby wyświetliś liczbę "po polsku", z przecinkiem dziesiętnym?
Poniższy data step demonstruje użycie kilku formatów:
data _null_;
l=-3384.70;
*domyślny format;
put l;
*bez spacji między tysiącami;
put l numx12.2;
*ze spacją między tysiącami przy locale=Polish;
put l nlnum12.2;
*z kropką między tysiącami;
put l commax12.2;
* długość formatu jest przykładowa;
run;
|

|
|
|
|
|
Ile procesów jest startowanych po uruchomieniu SAS-a poleceniem sas na Unixie?
Startowane są 2 lub 3 procesy. Dla sesji batchowej są to sas i elssrv, dla sesji interaktywnej: sas, elssrv i motifxsassm.
Rolę procesu (m.in.) elssrv opisuje nota:
SN-015231.
|

|
|
|
Jak przekierować wynik działania procedury do zbioru SAS?
Niektóre procedury mają wpudowany mechanizm zapisu wyników do zbioru. Mechanizmem uniwersalnym, dla wszystkich procedur jest ODS output.
Jeżeli wynik działania procedury zawiera kilka sekcji to wczesniej należy uruchomić komendę ODS trace on. Spowoduje ona wypisanie w logu wszystkich sekcji 'outputu'.
Przykład:
ods trace on;
ods output summary=tabelka;
proc means data=sashelp.class;
run;
Wynik działania procedury MEANS (sekcja summary) zostanie zapisany w zbiorze tabelka.
|

|
|
|
Jak powiązać nazwę katalogu zawierającego bibliotekę WORK z identyfikatorem sesji SAS?
Nazwa katalogu ze zbiorami roboczymi zawiera w sobie numer sesji (PID).
Przykład dla Windows:
Dla sesji SAS o numerze PID 2212 powstaje katalog _TD2212
Przykład dla UNIX:
Dla sesji SAS o numerze 9730 powstaje katalog SAS_work2E6E00002602_sun1. W tym przypadku 2602 to zapisana szesnastkowo dziesiętna liczba 9730.
|

|
|
|
Jak ograniczyć zajętość biblioteki WORK podczas sortowania dużych tabel?
W tym celu należy użyć opcji TAGSORT (jest to opcja procedury SORT). Dzięki niej, w plikach roboczych zapisywane są jedynie pola kluczowe a nie całe rekordy. Opcja ta może dać bardzo dużą poprawę wydajności jeżeli sortujemy zbiór o dużej liczbie zmiennych a sortowanie odbywa się według jednej lub kilku zmiennych.
|

|
|
|
Gdzie szukać przykładowych kodów SAS?
Przykładowe kody SAS można znaleźć na stronie:
http://support.sas.com/samples.
|

|
|
|
Z jaką precyzją SAS przechowuje liczby?
Upraszczając, na zachowanie precyzji przy przechowywaniu liczb w SAS-ie można liczyć przy liczbach o długości do 15 znaków.
Uściślając:
- maksymalna liczba całkowita możliwa do przechowania jest zwracana przez funkcję constant('EXACTINT',8).
- trzeba pamiętać, że liczby z częścią ułamkową zamieniane na reprezentację binarną (komputerową) mogą stracić na precyzji.
Ilustruje to poniższy kod:
data _null_;
v=12345678901234567;
put v= @18 v 17.;
v=999999999999999; *15 cyfr;
put v= @18 v 17.;
v=9999999999999999; *16 cyfr;
put v= @18 v 17.;
v=0.1234567890123456;
put v= @18 v 17.16;
v=123456.7890123456;
put v= @17 v 18.10;
v=0.999999999999999; *15 cyfr po przecinku (kropce);
put v= @18 v 17.16;
v=0.9999999999999999; *16 cyfr po przecinku (kropce);
put v= @18 v 17.16;
x=15.7-11.9;
if x=3.8 then
put 'równe';
else
put 'wyliczone ' x= 'nie jest równe 3.8';
x=0;
do i=1 to 10;
x+0.1;
end;
if x=1 then
put 'równe';
else
put 'wyliczone ' x= 'nie jest równe 1';
run;
W szczegółach zagadnienie precyzji obliczeń wykonywanych w SAS-ie omawia techniczny dokument:
http://support.sas.com/techsup/technote/ts230.html.
Warto też wspomnieć, że zagadnienie jest bardziej związane z przechowywaniem liczb dziesiętnych w formacie zmiennoprzecinkowym w pamięci komputera, niż z samym SAS-em.
|

|
|
|
Jak interpretować błędy w logu?
Jeżeli komunikat o błędzie jest niezrozumiały zalecamy przeszukanie not sasowych (SAS Notes) pod kątem występowania danego komunikatu.
W tym celu należy wejść na stronę:
http://support.sas.com/techsup.
Lub z Menu głównego SAS-a wybrać: Pomoc-> SAS na Webie-> Wsparcie Techniczne
Następnie mozna skorzystać z okienka 'Search' w górnej części ekranu. Należy wpisać treść błędu dopisując ewentualnie dodatkowe informacje, takie jak wersję SAS-a czy wersję systemu operacyjnego.
Uwaga: Jeżeli komunikat z błędem jest po polsku należy uruchomić SAS-a w wersji angielskiej i przeszukiwać noty z komunikatem w wersji angielskiej.
|

|
|
|
Jak usprawnić tworzenie grafiki w SAS?
Tym, którym tworzenie zaawansowanych wykresów w systemie SAS wydaje się trudne lub skomplikowane polecamy:
|

|
|
|
Jak sprawdzić, które moduły SASa są zainstalowane w systemie Windows?
Sprawdzenie można wykonać przy użyciu programu FILEDETV8.SAS lub FILEDETV9.SAS - do ściągnięcia z serwera ftp.
Więcej informacji o użyciu tego programu jest dostępnych w nocie SN-007640.
|

|
|
|
Co zrobić, aby okno DOS zamykało się automatycznie po wykonaniu polecenia X ?
Należy ustawić opcję:
options NOXWAIT
|

|
|
|
Jak programowo wyczyścić okienko LOG ?
Wykonanie polecenia:
dm editor 'log;clear';
wyczyści wprawdzie zawartość okienka LOG, ale otworzy dodatkowo okienko 'Program Edytora'. Aby temu zapobiec, należy wykonać:
dm editor 'log;clear' wedit;
|

|
|
|
Jak programowo sprawdzić czy dany produkt jest licencjonowany?
Należy użyć funkcji sysprod('nazwa produktu'). Funkcja zwraca 1 jeśli licencja dla danego produktu jest ważna, 0 jeśli jest nieważna, -1 jeśli nazwa produktu jest nierozpoznana. Funkcji można użyć w datastep-ie, SCL lub w IML step-ie, np.:
data _null_;
licensed=sysprod('pc file formats');
put licensed=;
licensed=sysprod('base’);
put licensed=;
licensed=sysprod('abc');
put licensed=;
run;
|

|
|
|
Jak uzyskać więcej informacji w okienku LOG?
W tym celu można ustawić w SAS dodatkowe opcje. Oto najczęściej używane:
Base SAS
DETAILS, ERRORS, MSGLEVEL, NOTES, SOURCE, SOURCE2, ECHOAUTO
makra
MLOGIC, MPRINT, SYMBOLGEN, MERROR, SERROR
wydajność
SAS/Access
SN-000207 - podłożyć link http://support.sas.com/techsup/unotes/SN/000/000207.html
SAS/Connect
odkomentować pierwsze wiersze w pliku tcp*.scr (trace on; echo on;)
ustawić opcje
-set TCPDEBUG N /* N = 0..63 */
-set TCPDFILE 'sciezka do pliku z logiem tcp'
inne
DATASTMTCHK, DKRICOND, DKROCOND, DLDMGACTION, DSNFERR
MERGENOBY,
DATE, NEWS, OVP, PRINTMSGLIST
UNBUFLOG
Niektóre opcje zależą od systemu operacyjnego. Informacje na ich temat można uzyskać w SAS Online Doc lub SAS Help.
|

|
|
|
Jak debugować działanie SAS/Access do relacyjnych baz danych?
Należy ustawić poniższe opcje, które spowodują zapisanie w logu SASowym szczegółowych informacji na temat poleceń wysyłanych do silnika bazy danych. Szczegóły w dokumentacji "Online Doc".
options sastrace=',,d,d' sastraceloc=saslog;
|

|
|
|
Jak wczytać dane z arkusza Excel, jeśli kolumna zawiera dane mieszanych typów?
Polecamy notę:
SN-006123.

|
|
|
Jak zainstalować SAS/GRAPH control for ActiveX?
Raporty w HTMLu zawierające obiekty ActiveX wymagają zainstalowania ActiveX na komputerze uzytkownika, który tę stronę będzie oglądał. Jak to zrobić? Jak to wygląda licencyjnie?
Licencyjnie nie ma żadnych ograniczeń. Kontrolka może być instalowana u dowolnej liczy użytkowników.
Najnowszą wersję programu instalacyjnego można ściągnąć z naszych stron zewnętrznych:
http://www.sas.com/apps/demosdownloads/setupintro.jsp --> SAS/GRAPH Software.
Udostępniając użytkownikom strony html zawierające obiekty ActiveX, mamy 2 możliwości:
- Zainstalować kontrolkę ręcznie, kopiując na lokalny komputer program instalacyjny
- Program instalacyjny może być uruchamiany automatycznie, kiedy użytkownik po raz pierwszy wyświetla stronę z grafiką w tym formacie.
W tym przypadku program instalacyjny musi być umieszczony na serwerze www, a w instrukcji ODS tworzącej stronę HTML musi być użyta opcja ARCHIVE= wskazująca na miejsce, gdzie umieszczony został program instalacyjny, np.
ODS HTML File = 'c:\temp\sastest.html' Archive = "http://www.server.com/sasweb/graph/sasgraph.exe";
Przy okazji warto wspomnieć, że aplikacja Web Report Studio nie wspiera grafiki wygenerowanej w formacie ActiveX. Grafika generowana w tym formacie jest automatycznie zamieniana na ACTXIMG (podobnie, kiedy wykorzystywany jest driver JAVA, jest on automatycznie zamieniany na JAVAIMG). Dzieje się tak, żeby WRS mogło pozostać w pełni aplikacją, która nie wymaga instalowania na lokalnym komputerze żadnego oprogramowania.
| 
|
|
|
Jak grupować po wartościach wyliczanych w procedurze SQL?
Pisząc zapytania w SQL często konieczne jest wyliczenie i pogrupowanie danych według nowej wartości. Czy jest to możliwe do wykonania w jednym kroku, a jeżeli tak, to jak to zrobić?
Pierwszym podejściem jest na ogół umieszczenie formuły wyliczającej nową wartość w klauzuli SELECT i powtórzenie jej w klauzuli GROUP BY, np.
SELECT oddzial || '-' || departament as oddzial1, sum(wartość)
FROM dane.zbior
GROUP BY oddzial || '-' || departament;
Po uruchomieniu takiego kodu wynik nie jest taki, jaki był oczekiwany, a w logu pojawia się komunikat
NOTE: The query requires remerging summary statistics back with the original data.
Oznacza on, że grupowanie nie mogło zostać przeprowadzone poprawnie. Dzieje się tak dlatego, że dla SASa wyrażenie w SELECT i GROUP BY to dwa różne wyrażenia, co oznacza, że użytkownik chciał grupować dane według zmiennej, której nie ma w SELECT. A takie grupowanie nie jest poprawne.
Wystarczy jednak drobna modyfikacja kodu, żeby uzyskać spodziewany wynik:
SELECT oddzial || '-' || departament as oddzial1, sum(wartość)
FROM dane.zbior
GROUP BY CALCULATED oddzial1;
W tym przypadku grupy zostaną wyznaczone poprawnie, dane będą zagregowane, a w logu nie będzie żadnego ostrzeżenia.

|
|
|
Jak zapisywać log w trakcie przetwarzania, bez potrzeby czekania na koniec zadania?
Domyślnie informacje, które będą zapisywane w logu, są buforowane i wypisywane dopiero po zapełnieniu bufora lub zakończeniu zadania. Na takie zachowanie ma wpływ opcja LOGPARM, ustawiana przy starcie SASa, a konkretnie jej parametr WRITE, który domyślnie ma wartość BUFFERED:
LOGPARM="WRITE=BUFFERED | IMMEDIATE"
Jeżeli istnieje potrzeba śledzenia logu na bieżąco, należy ustawić:
LOGPARM="WRITE=IMMEDIATE"
Przy takim ustawieniu informacje do loga będą wypisywane natychmiast
|

|
|
|
Co zrobić, żeby w Enhanced Edytorze działała kombinacja klawiszy ctrl+home?
W polskiej wersji nie działa skrót ctrl+home w edytorze SASa na Windows. Problem będzie całkowicie rozwiązany w wersji 9.2, a jako tymczasowe obejście należy usunąć katalog:
C:\Program Files\SAS Institute\Shared Files\Enhanced Editor\nls\pol
i na nowo uruchomić SASa.
Skutkiem ubocznym będzie angielskie menu w Tools --> Options --> Enhanced Editor.
|

|
|
|
Które wersje Windows są wspierane przez poszczególne wersje SAS?
Tabelkę kompatybilności wersji SAS z wersjami Windows można znaleźć na stronie:
http://support.sas.com/documentation/hosts/pc/.
|

|
|
|
Czy jest wsparcie dla Systemu SAS na Windows XP SP2?
System SAS jest wspierany na Windows XP SP2 zarówno w wersji 8.2 jak i 9.1. Poniższy dokument może pomóc w rozwiązywaniu ewentualnych problemów związanych z XP Service Pack 2:
SAS Products Support for Windows XP Service Pack 2
|

|
|
|
Czy jest wsparcie dla Systemu SAS na Windows Vista?
Istnieje podstawowe wsparcie SAS 9.1 dla Windows Vista. Wparcie jest ograniczone do SAS Foundation (patrz: lista modułów w linku poniżej).
Nie ma wsparcia dla serwerów IOM, EG, AMO, aplikacji Javowych, aplikacji webowych. IE7 jest wspierany, ale tylko w ograniczeniu do przeglądania OnLine Doc i wyników ODS.
Szczegóły przedstawia dokument
Support for Microsoft Windows VistaTM
|

|
|
Data ostatniej aktualizacji dokumentu: 05.12.2007
|
| |