Convert SAS Log Into SAS Source

Hallo,
was beim Redscope lesen immer so "abfällt" ...
Vor einigen Tagen als das Thema Grafische Oberfläche noch aktiver war folgte ich dem Link aus dem Beitrag Ich habe leider nur SAS Base (von Xilef, 31. Juli 2007,08:07) zu den SUGI proceedings und blättere durch, was sonst noch auf der Sugi so interessantes erzählt wurde. Beim

Paper 065-30: Jianming He
Some UNIX Tips for SAS Programming

bin ich hängen geblieben und habe es mir genauer angeschaut. Siehe da: Schon der erste Punkt war interessant, nämlich:

Convert SAS Log Into SAS Source Code

Genau einen Tag später erreichte mich der Hilferuf eines internen Abnehmers eines unserer Power-User: Der Power-User sei in Urlaub, der Abnehmer benötige dringend Details zu einer Auswertung vom besagten Power-User.
So weit so schlecht. Ein bisschen wühlen auf dem DWH-(Unix-)Server, dort hinter jeder User einiges an Spuren ...
Auch die Power-User hinterlassen, dank der altlog-Option im SAS-Aufruf, eine Kopie ihres LOG-Fensters ihrer PC-SAS-Session (nur den Teil, den sie mit rsubmit starten, aber der reicht meist, so auch hier).
In der passenden Kopie des LOG-Fenster der SAS-Session war der gesuchte Code schnell gefunden und dank dem tollen Artikel Some UNIX Scripts Tips for SAS Coding war daraus schnell der Code erzeugt und dem Anwender konnte geholfen werden (ohne den Power-User-Kollegen im Urlaub zu stören)

Hans Kneilmann, Schäfer Shop GmbH (SSI)

P.S.
1) Ob die Kollegen wissen, wieviel wir als Admins unsers DWH sehen können, wenn wir wollen?
2) Dieser Beitrag war zuerst hier, den habe ich aber als eigenen Forums-Beitrag "wiederverwertet", damit der Hinweis wie man bequem aus dem LOG den Code erzeugt besser rüberkommt.

Option MFILE

Falls es um Macro-generierten Code geht ist auch die Option MFILE recht nützlich. Damit kann die Ausgabe von MPRINT in einen File geroutet werden. Leider werden Einrückungen im Code nicht übernommen ;-((

Peter Mehnert

MFILE Beispiel

zu MFILE habe ich gerade heute eine schöne Seite mit einem schönen Beispiel gefunden.
Dieser Code:

options mprint mfile ;
filename mprint 'c:/macro.sas' ;
%macro testit ;
  data test ;
    
%do i = 1 %to 6 ;
      var&i = floor(ranuni(&i)*
49) ;
    
%end ;
  run ;
%mend testit ;
%testit
erzeugt die folgende log Datei:

1    options mprint mfile ;
2
3    filename mprint 'c:/macro.sas' ;
4
5    %macro testit ;
6      data test ;
7        %do i = 1 %to 6 ;
8          var&i = floor(ranuni(&i)*49) ;
9        %end ;
10     run ;
11   %mend testit ;
12
13   %testitMPRINT(TESTIT):   data test ;
NOTE: The macro generated output from MPRINT will also be written to
      external file c:\macro.sas
      while OPTIONS MPRINT and MFILE are set.
MPRINT(TESTIT):   var1 = floor(ranuni(1)*49) ;
MPRINT(TESTIT):   var2 = floor(ranuni(2)*49) ;
MPRINT(TESTIT):   var3 = floor(ranuni(3)*49) ;
MPRINT(TESTIT):   var4 = floor(ranuni(4)*49) ;
MPRINT(TESTIT):   var5 = floor(ranuni(5)*49) ;
MPRINT(TESTIT):   var6 = floor(ranuni(6)*49) ;
MPRINT(TESTIT):   run ;

und die folgende externe Datei:

data test ;
var1 = floor(ranuni(1)*49) ;
var2 = floor(ranuni(2)*49) ;
var3 = floor(ranuni(3)*49) ;
var4 = floor(ranuni(4)*49) ;
var5 = floor(ranuni(5)*49) ;
var6 = floor(ranuni(6)*49) ;
run ;

Quelle:
MPRINT and MFILE show generated macro code in an easy to read external file
(Copyright © Newtyne Limited. All Rights Reserved.)
Gefunden über den "Um-"Weg: Redscope » Links » SAS Institute » sasCommunity.org (englisch), dort Sasopedia anklicken, dort in der 2. Spalte ganz unten findet sich THEN DO; SAS Knowledgebase from Newtyne und dort ist 'irgendwo' unter SAS Macros der Artikel zu MPRINT und MFILE.

Der 'Witz' an dem "Convert SAS Log Into SAS Source" ist, dass man nachträglich, wenn es eigentlich zu spät ist, den Code rekonstruieren kann.

Hans Kneilmann, Schäfer Shop GmbH (SSI)