Selbsteinschätzung


SAS® Makrosprache 2: Praxis für Fortgeschrittene

Bitte wählen Sie die beste Antwort zu jeder Frage. Zum Abschluss klicken Sie bitte auf Quiz ausführen.

  1. Welche Aussage ist falsch?

     a.   Makrofunktionen werden immer während der Ausführung eines DATA Step verarbeitet.
     b.   In einem DATA Step werden Verweise auf Makrovariable immer vor der Kompilierung aufgelöst.
     c.   Eine %LET Anweisung veranlasst den Makroprozessor eine Makrovariable vor der Kompilierung zu erstellen.
     d.   Die CALL SYMPUTX Routine erstellt eine Makrovariable basierend auf berechneten Daten im DATA Step.


  2. Welcher DATA Step erstellt eine Makrovariable namens Region und weist ihr den Wert East oder West zu, basierend auf dem Wert der Variablen Location?

     a.  
    data new;
       set sasuser.all;
       if Location='Boston' then do;
          call symputx('Region', 
                       'East');
       end;
       else do;
          call symputx('Region', 
                       'West');
       end;
    run;
     b.  
    data new;
       set sasuser.all;
       if Location='Boston' then do;
          %let Region=East;
       end;
       else do;
          %let Region=West;
       end;
    run;
     c.  
    data new;
       set sasuser.all;
       if Location='Boston' then do;
          call symputx(Region, "East");
       end;
       else do;
          call symputx(Region, "West");
       end;
    run;
     d.  
    data new;
       set sasuser.all;
       if Location='Boston' then do;
          symputx(Region, East);
       end;
       else do;
          symputx(Region, West);
       end;
    run;


  3. Welches Beispiel erstellt eine korrekte Makrovariable in einen PROC SQL Step?

     a.  
    select Fee/Days format=dollar8. 
       into Daily_Fee from sasuser.all;
     b.  
    select Fee/Days format=dollar8.
       into :Daily_Fee from sasuser.all;
     c.  
    %let Daily_Fee=put(Fee/Days, dollar8.);
     d.  
    call symputx(Daily_Fee, put(Fee/Days, dollar8.);
    


  4. Betrachten Sie bitte die folgende globale Symboltabelle:

    Global Symbol Table
    TEACH1 Hallis, Dr. George
    TEACH2 Wickam, Dr. Alice
    TEACH3 Forest, Mr. Peter
    CRS 3

    Zu welchem Wert wird &&TEACH&CRS abschließend aufgelöst?

     a.   TEACH3
     b.   &TEACH3
     c.   &TEACH&CRS
     d.   Forest, Mr. Peter


  5. Welches Beispiel definiert ein Makro namens Print, welches die Parameter vars und total korrekt verwendet?

     a.  
    %macro Print(&vars, &total);
       proc print data=classes;
          var vars;
          sum total;
       run;
    %mend Print;
     b.  
    %macro Print(vars, total);
       proc print data=classes;
          var &vars;
          sum &total;
       run;
    %mend Print;
     c.  
    %macro Print('vars', 'total');
       proc print data=classes;
          var &vars;
          sum &total;
       run;
    %mend Print;
     d.  
    %macro Print(vars, total);
       proc print data=classes;
          var :vars;
          sum :total;
       run;
    %mend Print;


  6. Welches Beispiel erstellt eine Makrovariable namens Class in einer lokalen Symboltabelle? Setzen Sie bitte voraus, dass jeder Programmschritt als eigene SAS Session ausgeführt wird.

     a.  
    data _null_;
       set sasuser.courses;
       %let Class=Course_Title;
    run;
     b.  
    data _null_;
       set sasuser.courses;
       call symputx('Class', Course_Title);
    run;
     c.  
    %macro sample(dsn);
       %global Class;
       %let Class=Course_Title;
       data _null_;
          set &dsn;
       run;
    %mend;
    
    %sample(courses)
     d.  
    %macro sample(dsn);
       %let Class=Course_Title;
       data _null_;
          set &dsn;
       run;
    %mend;
    
    %sample(courses)


  7. Nehmen Sie bitte an, dass Sie SAS heute gestartet haben. Welche Anweisung setzt die Makrovariable CurrDate korrekt auf das heutige Datum?

     a.   %let CurrDate = today();
     b.   %let CurrDate = %sysfunc(&sysdate);
     c.   %let CurrDate = put(today(),worddate.);
     d.   %let CurrDate = %sysfunc(today(),worddate.);


  8. Welches Beispiel erzeugt die korrekte Ausgabe, wenn die Makrovariable MacVar noch keinen Wert hat?

     a.  
    %macro test;
       %if &MacVar = %then %do;
          %put value of MacVar is null;
       %end;
    %mend;
     b.  
    %macro test;
       %if &MacVar = _null_ %then %do;
          %put value of MacVar is null;
       %end;
    %mend;
     c.  
    %macro test;
       %if &MacVar = "  " %then %do;
          %put value of MacVar is null;
       %end;
    %mend;
     d.  
    %macro test;
       %if "MacVar" = %then %do;
          %put value of MacVar is null;
       %end;
    %mend;


  9. Welches Beispiel erzeugt eine Reihenfolge von Makrovariablen mit den Namen DSN1 bis DSNn?

     a.  
    data _null_;
       set sashelp.vstabvw; 
          where libname='WORK';
          call symputx('DSN'||_n_, memname);
    run;
     b.  
    data _null_;
       set sashelp.vstabvw; 
          where libname='WORK';
          call symputx('DSN', memname);
    run;
     c.  
    data _null_;
       set sashelp.vstabvw; 
          where libname='WORK';
          call symputx('DSN'||left(_n_), memname);
    run;
     d.  
    data _null_;
       set sashelp.vstabvw; 
          where libname='WORK';
          %let DSN=memname;
    run;


  10. Betrachten Sie bitte die folgende globale Symboltabelle:

    Global Symbol Table
    DSN1 employee
    DSN2 payroll
    DSN3 customer
    N 3


    Welches Makroprogramm erstellt einen Listenbericht von jeder Datei, wenn die Dateinamen in den Makrovariablen DSN1 bis DSN3 gespeichert sind?

     a.  
    %macro Test;
       %do i=1 %to n;
          proc print data=&&DSN&i;
          run;
       %end;
    %mend;
     b.  
    %macro Test;
       %do i=1 %to &n;
          proc print data=&&DSN&i;
          run;
       %end;
    %mend;
     c.  
    %macro Test;
       %do i=1 %to &n;
          proc print data=&DSN&i;
          run;
       %end;
    %mend;
     d.  
    %macro Test;
       %do &i=1 %to &n;
          proc print data=&&DSN&i;
          run;
       %end;
    %mend;