Wie können Sie einen SAS-Datensatz aus einem anderen Datensatz erstellen, indem Sie nur die letzten n Beobachtungen des ursprünglichen Datensatzes verwenden? Das ist einfach, wenn Sie den Wert von n kennen. Wenn ich nicht weiß, wie kann das gemacht werden?SAS - Wie bekomme ich letzte 'n' Beobachtungen aus einem Datensatz?
Antwort
Dies setzt voraus, dass Sie eine Makrovariable haben, die angibt, wie viele Beobachtungen Sie möchten. NOBS teilt Ihnen die Anzahl der Beobachtungen im Datensatz mit, ohne das Ganze zu lesen.
%let obswant=5;
data want;
set sashelp.class nobs=obscount;
if _n_ gt (obscount-&obswant.);
run;
Mit Joes Beispiel einer Makrovariablen die Anzahl der Beobachtungen geben Sie, hier wollen, ist eine andere Antwort:
%let obswant = 10;
data want;
do _i_=nobs-(&obswant-1) to nobs;
set have point=_i_ nobs=nobs;
output;
end;
stop; /* Needed to stop data step */
run;
Dies sollte eine bessere Leistung, da sie nur die spezifischen Beobachtungen liest man will.
Ich bin gespannt auf die Bedingungen für "das sollte besser funktionieren". Ich vermute, es ist ein Teil von jedem; Der wahlfreie Zugriff ist nicht so schnell wie der sequenzielle Zugriff, daher gibt es dort einen gewissen Verlust. Kann es ausprobieren, wenn ich etwas Zeit habe. Ich vermute, wenn Sie die meisten Beobachtungen verwenden, ist es schneller, es sequenziell zu tun, aber wenn es ein großer Datensatz ist und Sie eine kleine Anzahl von Beobachtungen wollen, ist es schneller, es zufällig zu tun = Zugang. Wünscht mir, dass SAS eine Möglichkeit hat, einen Datensatz in umgekehrter Reihenfolge zu öffnen, ohne ihn vorher sortieren zu müssen. – Joe
@Joe Stelle dir einen Datensatz mit 1 Million Obs vor und du willst den "letzten" 10. Mit dieser Technik werden nur 10 "Eingabe" -Operationen durchgeführt. Die Verwendung nur des NOBS-Werts erfordert 1 Million "Eingabe" -Operationen. Abhängig davon, wie breit der Datensatz ist, kann dieser Unterschied sehr signifikant sein. – BellevueBob
Richtig, ich sehe sicherlich die Möglichkeit, dass es schneller geht. Ich bin neugierig, an welchem Punkt es schneller/langsamer ist (dh, welche Größe des Datasets, was% der Daten gezogen wird - 10 von 1MM natürlich wäre schneller, aber was ist 500k von 1MM?) – Joe
Aus Gründen der Vielfalt, hier ist ein anderer Ansatz (nicht unbedingt ein besserer)
%let obswant=5;
proc sql noprint;
select nlobs-&obswant.+1 into :obscalc
from dictionary.tables
where libname='SASHELP' and upcase(memname)='CLASS';
quit;
data want;
set sashelp.class (firstobs=&obscalc.);
run;
Hinweis: Sie möchten angeben Format bei Verwendung von select..into, ansonsten wird der Wert als BEST8. formatiert, was zu seltsamen Fehlern führt, wenn Sie einen Wert> = 100.000.000 wählen (er ist in Exponentialschreibweise formatiert, was zum Runden führt). – Nickolay
Wenn der Datensatz groß ist, könnten Sie nicht den gesamten Datensatz lesen mögen. Stattdessen könnten Sie eine Konstruktion versuchen, die zuerst die Gesamtzahl der Beobachtungen im Datensatz liest. Also, wenn Sie die letzten Beobachtungen haben möchten:
data t;
input x;
datalines;
1
2
3
4
;
%let dsid=%sysfunc(open(t));
%let num=%sysfunc(attrn(&dsid,nlobs));
%let rc=%sysfunc(close(&dsid));
%let number = 2;
data tt;
set t (firstobs = %eval(&num.-&number.+1));
run;
- 1. erste und letzte Beobachtungen in sas
- 2. Wie alle 1000 Beobachtungen im Datensatz zu zählen. SAS
- 3. Wie viele Beobachtungen in der SAS-Beispieldatenausgabe
- 4. Wie bekomme ich die letzte n Reihe von Pandas Dataframe?
- 5. letzte und spezifische Werte aus einem SAS Makrovariablen Entfernen
- 6. Putting Beobachtungen in einer Variablen SAS EG
- 7. Wie bekomme ich Top-N-Unternehmen aus einem Datenrahmen in abnehmender Reihenfolge
- 8. Generieren von Beobachtungen für nicht vorhandene Beobachtungen
- 9. SAS: multiplyi Beobachtungen und iterieren eine Spalte
- 10. Wie bekomme ich die SAS-Kodierungsoption programmgesteuert?
- 11. Der letzte Datensatz wurde aus Formel
- 12. SAS: Kontinuierliches Hinzufügen von Beobachtungen in einer do-Schleife
- 13. SAS; Wie man einen Datensatz aktualisiert
- 14. Erste und letzte Funktion sas
- 15. So zählen Sie Beobachtungen in einem SAS-Dataset mit proc sql? H
- 16. Wie bekomme ich das letzte Objekt aus dem Objektfeld?
- 17. n Datensätze aus n-te Datensatz in Linq
- 18. Erhalten letzte n Elemente aus dem Strom
- 19. SAS DATA step/INPUT-Anweisung: Spaltenbasierte Rohdaten UND mehrere Beobachtungen aus einer Zeile lesen?
- 20. Wie bekomme ich N-ten Typ von einem Tupel?
- 21. Öffnen von SAS-Datasets zum Anzeigen aus einem .sas-Programm
- 22. Wie bekomme ich das letzte Commit-Datum vom Git-Repository?
- 23. SAS Sammeln/Zusammenfassen von Beobachtungen über ein Zeitintervall
- 24. Wie kann ich die erste und letzte Woche jedes Monats in SAS auswählen?
- 25. Wie bekomme ich letzte ID in yii2 mit createCommand?
- 26. Wie bekomme ich die letzte ID in Laravel?
- 27. SAS
- 28. Wie lösche ich das letzte Element aus einem Array?
- 29. Wie Informationen aus einem Datensatz in OCaml
- 30. Wie mache ich Linsen aus einem Datensatz in GHCi
Was meinst du, du weißt nicht 'n'? Wie werden Sie den Wert von 'n' herausfinden - ist es eine Datensatzvariable, eine Makrovariable, ein Parameter? – Joe