SASSAS Poland

Misja Firmy AktualnościKonferencjeUsługi i wsparciePracaKontakt
Strona główna Produkkty i rozwiązania Współpraca z uczelniami Szkolenia Kim jesteśmy Wsprcie techniczne www.sas.com
 
Wsparcie techniczne
Zrób to sam
Dla aktywnych
Nasze dokumenty
Architektura SAS® 9
FAQ
Hotline
Kilka słów o nas
 

FAQ - Programowanie w SAS (+ ODS )

  • Makrozmienna w makrze
  • W jaki sposób odczytać wartość zmiennej środowiskowej?
  • W jaki sposób użyć makrozmiennej SYSDATE?
  • Jak zmienić tytuł w Output?
  • Jak użyć makra, aby sprawdzić czy zbiór istnieje?
  • Maksymalna długość makrozmiennej
  • Jak usunąć globalne makrozmienne zdefiniowane przez użytkownika?
  • Jak otworzyć zbiór zawierający kolumny z nałożonymi formatami, których nie posiadamy?
  • Jak debugować działanie data-stepu?
  • Jakiego formatu użyć aby wyświetliś liczbę "po polsku", z przecinkiem dziesiętnym?
  • Ile procesów jest startowanych po uruchomieniu SAS-a poleceniem sas na Unixie?
  • Jak przekierować wynik działania procedury do zbioru SAS?
  • Jak powiązać nazwę katalogu zawierającego bibliotekę WORK z identyfikatorem sesji SAS?
  • Jak ograniczyć zajętość biblioteki WORK podczas sortowania dużych tabel?
  • Gdzie szukać przykładowych kodów SAS?
  • Z jaką precyzją SAS przechowuje liczby?
  • Jak interpretować błędy w logu?
  • Jak usprawnić tworzenie grafiki w SAS?
  • Jak sprawdzić, które moduły SASa są zainstalowane w systemie Windows?
  • Co zrobić, aby okno DOS zamykało się automatycznie po wykonaniu polecenia X?
  • Jak programowo wyczyścić okienko LOG?
  • Jak programowo sprawdzić czy dany produkt jest licencjonowany?
  • Jak uzyskać więcej informacji w okienku LOG?
  • Jak debugować działanie SAS/Access do relacyjnych baz danych?
  • Jak wczytać dane z arkusza Excel, jeśli kolumna zawiera dane mieszanych typów?
  • Jak zainstalować SAS/GRAPH control for ActiveX
  • Jak grupować po wartościach wyliczanych w procedurze SQL?
  • Jak zapisywać log w trakcie przetwarzania, bez potrzeby czekania na koniec zadania?
  • Co zrobić, żeby w Enhanced Edytorze działała kombinacja klawiszy ctrl+home?
  • Które wersje Windows są wspierane przez poszczególne wersje SAS?
  • Czy jest wsparcie dla Systemu SAS na Windows XP SP2
  • Czy jest wsparcie dla Systemu SAS na Windows Vista?

  • 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
  • Powrót na górę

  • 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;
  • Powrót na górę

  • W jaki sposób użyć makrozmiennej SYSDATE?

    Przykład:

      options yearcutoff = 1920 ;
      data _null_ ;
      date = input("&sysdate",date7.) ;
      put date ddmmyy10. ;
      run ;
  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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));
  • Powrót na górę

  • 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.

  • Powrót na górę

  • Jak usunąć globalne makrozmienne zdefiniowane przez użytkownika?

    Można do tego użyć makro funkcji %SYMDEL w następujący sposób

      %SYMDEL makrozmienna(e);

    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
  • Powrót na górę

  • Jak otworzyć zbiór zawierający kolumny z nałożonymi formatami, których nie posiadamy?

    Przed otwarciem należy ustawić opcję options nofmterr;

  • Powrót na górę

  • Jak debugować działanie data-stepu?

    Należy dodać opcję "/debug", jak w przykładzie poniżej:

      data zbior / debug;
      ...
      run;
  • Powrót na górę

  • 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;
  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • Gdzie szukać przykładowych kodów SAS?

    Przykładowe kody SAS można znaleźć na stronie: http://support.sas.com/samples.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • Jak usprawnić tworzenie grafiki w SAS?

    Tym, którym tworzenie zaawansowanych wykresów w systemie SAS wydaje się trudne lub skomplikowane polecamy:

  • Powrót na górę

  • 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.

  • Powrót na górę

  • Co zrobić, aby okno DOS zamykało się automatycznie po wykonaniu polecenia X ?

    Należy ustawić opcję:

    options NOXWAIT

  • Powrót na górę

  • 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;

  • Powrót na górę

  • 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;
  • Powrót na górę

  • 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ść

      FULLSTIMER

    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.

  • Powrót na górę

  • 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;

  • Powrót na górę

  • Jak wczytać dane z arkusza Excel, jeśli kolumna zawiera dane mieszanych typów?

    Polecamy notę: SN-006123.

  • Powrót na górę

  • 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:

    1. Zainstalować kontrolkę ręcznie, kopiując na lokalny komputer program instalacyjny
    2. Program instalacyjny może być uruchamiany automatycznie, kiedy użytkownik po raz pierwszy wyświetla stronę z grafiką w tym formacie.
    3. 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.

  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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
  • Powrót na górę

  • 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.

  • Powrót na górę

  • 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/.

  • Powrót na górę

  • 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

  • Powrót na górę

  • 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

  • Powrót na górę

    Data ostatniej aktualizacji dokumentu: 05.12.2007

     

  • Citat
    Warsztaty SAS® 9 dla Administratorów
    Rodzaje serwerów SAS® 9
    Przypisywanie bibliotek SAS® 9
    Pozycja 'SAS' w menu MS Excel
    SAS Dates, Times, and Datetimes
    SAS Free Tutorials
    Hotline NEWS






    Kontakt
    Wsparcie techniczne
    +48-22-5604666
    od poniedziałku do piątku w godzinach od 8.30 do 16.30.
     
    support@spl.sas.com
    The Power to Know
       Skontaktuj się z nami     Szukaj     Terms of Use & Legal Information     Privacy Statement   Copyright © 2003 SAS Institute Inc. All Rights Reserved