Was ist Ihr bester Trick in BASE SAS aus einem unausgeglichenen Zustand Zitat zu brechen?

StackOverflow https://stackoverflow.com/questions/107414

  •  01-07-2019
  •  | 
  •  

Frage

Als Basis SAS Programmierer, wissen Sie das:

einreichen Sie Ihren SAS-Code, der ein unsymmetrischen Zitat enthält, so jetzt haben Sie nicht nur und nicht geschlossene Zitat bekommen, aber auch nicht geschlossene Kommentare, Makrofunktion Definitionen und einen fehlenden Lauf; oder beenden; Aussage.

Was ist die beste Trick für nicht diese unausgeglichenen Zitate stören zu müssen?

War es hilfreich?

Lösung

Unternehmensführung 3 verwendet, um die folgende Zeile setzt an der Spitze seines automatisch generierten Code:

*';*";*/;run;

aber der einzige Weg, um wirklich „Reset“ aus allen Arten von etwas unausgeglichen Problemen ist die sas Sitzung zu beenden, und das Gleichgewicht, was unausgeglichen ist, bevor Sie den Code erneut eingeben. Mit dieser Art von schnell (billig?) Hacks nicht die Ursache behandeln.

durch die Art und Weise, ods _all_ close; schließt alle die ods Ziele, einschließlich der Standard ergibt Ziel. in einer interaktiven Sitzung, sollten Sie sie wieder öffnen mit ods results; oder ods results on; zumindest nach der Dokumention. aber wenn ich es auf meinem 9.2 getestet, es hat nicht funktioniert, wie unten dargestellt:

%put sysvlong=&sysvlong sysscpl=&sysscpl;
/* sysvlong=9.02.01M0P020508 sysscpl=X64_VSPRO */

ods _all_ close;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

ods results on;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

Andere Tipps

Was mich betrifft, ich in der Regel Google für "SAS unausgewogen Zitat" , und am Ende mit so etwas wie der Einreichung diese :

*); */; /*’*/ /*”*/; %mend;

... aus unverschlossenen Kommentare zu brechen, Zitate und Makrofunktionen.

Hier ist der, den ich verwenden.

 ;*';*";*/;quit;run;
 ODS _ALL_ CLOSE;
 QUIT; RUN;

hatte ich eine Situation mit unsymmetrischen Anführungszeichen in einem Makro und die einzige Lösung war die Instanz von SAS und von vorn beginnen zu schließen.

Ich glaube, das ist ein inakzeptable Fehler in SAS.

Allerdings habe ich die Methoden von Both # 2 und # 5 und es funktioniert. # 2 und dann 1 #. Ich habe sie vor allem Code, einschließlich meinen Code-Header, zu erklären, was dieses Programm tut.

Arbeitete wie ein Charme.

Ich schrieb ein Perl-Programm, das durch ein bestimmtes SAS-Programm liest und verfolgt Dinge, die paarweise kommen sollten. Mit Dingen wie Klammern, die eingebettet werden können, druckt er das Niveau der am Anfang jeder Zeile nisten. Es muss in der Lage Klammern zu unterscheiden, die Teil von Makrofunktionen von denen sind, die einen Teil der Daten Schrittfunktionen, einschließlich% sysfunc Anrufe, die in der Makro-Umfeld befinden aber Anrufe in Daten Schritt Funktionen machen (müssen tun, auch ähnlich für% syscall Makro Funktionsaufrufe), aber das ist machbar durch reguläre Ausdrücke. Ist die Höhe der Verschachtelung negativ wird, ist es ein Hinweis, dass das Problem in der Nähe sein kann.

Es beginnt auch einfache und doppelte Anführungszeichen vom Start des Programms und identifiziert Zählen, ob die Zählung jeden solchen Symbols ist es eine gerade oder ungerade trifft. Wie bei den Klammern, muss es in der Lage sein, Zitate zu unterscheiden, von denen einen Teil des Makrocode, der Teil der Daten Schritt Code sind und auch diejenigen, die Teil von Zeichenkette wie O'Riley und% nrstr (% '% ") sind und sie nicht zählen, aber pattern-Matching umgehen kann das auch.

Wenn das Problem des nicht übereinstimmen Artikel von Code stammt, die zur Laufzeit von Makrocode erzeugt wird, und ist daher nicht in dem Quellprogramm, dann schalte ich Option mfile den erzeugten Daten Schritt Code in eine Datei zu schreiben und dann laufen das perl-Skript gegen diesen Code.

Ich entschied mich für Perl wegen seiner starken Pattern-Matching-Fähigkeiten aber auch jede andere Pattern-Matching-Sprache sollte gut funktionieren. Hoffe, das hilft.

Sie können immer nur eine Ausgabe beenden eingereichten Erklärungen Befehl und erneut einreichen, was Sie ausführen versuchen.

wollte nur AFHood Vorschlag zu verwenden, um die ODS _ALL_ CLOSE; Aussage bekräftigen. Das ist ein Schlüssel eines aufzunehmen. Und stellen Sie sicher, dass Sie es verwenden, jedes Mal wenn Sie mit ODS sowieso fertig sind.

Schließen der SAS Session in meinem Fall gearbeitet. Ich glaube, Sie dies einmal versuchen können, bevor Sie andere Methoden versuchen, hier erwähnt werden.

Ja, ich glaube, dass die offizielle SAS Dokumentation der Lösung empfiehlt Sie für sich selbst vorgeschlagen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top