2016-05-16 2 views
0

Ich habe 'Moments' von Proc Univariate in Datensätze ausgegeben. Viele.Text in alle Zellen der ersten Spalte in einem sas-Dataset einfügen

Beispiel: Moments_001.sas7bdat bis zum Moments_237.sas7bdat

Zum ersten Spalte jeden Datensatz (neu hinzugefügt erster Spalt, und wahrscheinlich neuen Datensatz, wie auf das Original gegen) Ich mochte einen bestimmten Text haben, in jeder Zelle in die untere Reihe.

Der genaue Text wäre der Name der jeweiligen Dataset-Datei: sagen wir "Moments_001".

Ich muss den Dateinamen per se nicht "greifen", wenn das nicht möglich ist. Da ich weiß, was die Namen bereits sind, kann ich diesen Text in die Prozedur einfügen. Allerdings wäre es für mich von meinem Standpunkt aus einfacher, die Dateinamen zu nehmen.

Ich würde jede Hilfe sehr schätzen, die jemand zur Verfügung stellen könnte, um dies zu erreichen.

Danke, Nicholas Kormaník

+0

Bitte markieren Sie die Antwort, die Ihr Problem als akzeptiert gelöst hat. Wenn keine der Antworten zufriedenstellend ist, erklären Sie, warum vorgeschlagene Lösungen Ihr Problem nicht lösen. Auf diese Weise können SO-Nutzer neue/bessere Lösungen veröffentlichen oder vorhandene Antworten verbessern und werden in Zukunft wahrscheinlich auch Antworten auf Ihre Fragen geben. – kristof

Antwort

0

Die rohe Gewalt von Text in Spalte Eingabe sieht 1 wie folgt aus:

data moments_001; 
    length text $ 16; 
    set moments_001; 
    text="Moments_001"; 
run; 

Sie auch ein Makro schreiben könnte, die Schleife durch alle 237 Datensätze und die einfügen würde Text.

UNTESTED CODE

%macro do_all; 
    %do i=1 %to 237; 
    %let num = %sysfunc(putn(&i,z3.)); 
    data moments_# 
     length text & 16; 
     set moments_# 
     text="Moments_&num"; 
    run; 
    %end; 
%mend 
%do_all 

Es scheint mir (nicht Ihr Problem zu wissen), dass, wenn Sie PROC UNIVARIATE mit der Option BY verwenden, dann würden Sie nicht 237 verschiedene Datensätze müssen, dass alle Ihre Ausgaben würde in einem Datensatz sein und die BY-Variable wäre ebenfalls im Datensatz enthalten. Löst das dein Problem?

0

Ich denke, etwas in dieser Richtung sollte sein, was Sie suchen. Angenommen, Sie haben eine Liste von Momenten, können Sie sie durchlaufen und eine neue Variable als erste Spalte jedes Datasets hinzufügen.

%let list_of_moments = moments_001 moments_002 ... moments_237; 

%macro your_macro; 

    %do i = 1 %to %sysfunc(countw(&list_of_moments.)); 
    %let this_moment = %scan(&list_of_moments., &i.); 

     data &this_moment._v2; 
      retain new_variable; 
      set &this_moment.; 
      new_variable = "&this_moment."; 
     run; 

    %end; 

%mend your_macro; 

%your_macro; 
2

Suchen Sie nach der INDSNAME Option der SET-Anweisung? Sie müssen zwei Variablen definieren, da die von der Option generierte automatisch gelöscht wird.

data want; 
    length moment dsn $41 ; 
    set Moments_001 - Moments_237 indsname=dsn ; 
    moment=dsn; 
run; 
Verwandte Themen