Matroids Matheplanet Forum Index
Moderiert von matroid mire2
Mathematische Software & Apps » Statistikpakete » SAS: Histogramm bzw. Variablenbelegung
Autor
Beruf SAS: Histogramm bzw. Variablenbelegung
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Themenstart: 2018-03-16

Hallo zusammen! Ich komme nicht weiter. SAS ist mir ein Buch mit 7 Siegeln. Und googlen bringt mich nicht weiter, also hoffe ich nun auf das Schwarmwissen. Nebenfrage: Gibt es eine wirklich empfehlenswerte Doku, die ich mir mal durchlesen könnte um Deppenfragen wie die folgende demnächst zu vermeiden? Hauptfrage: Ein Makro soll folgendes tun: Histogramme malen - mit je 10 Klassen mit Abstand (Max-Min)/10 und von Min bis MAx einer Variable - und mit der Anzahl der Gruppen als untereinanderstehenden Fenstern Folgender Programmcode steht bislang: data tmp_variablen; set TABELLE; run; title 'Histogramme'; proc univariate data=tmp_variablen noprint; class GRUPPEN; var VARIABLE; histogram VARIABLE / NROWS= ANZ(GRUPPEN) /* läuft so nicht*/ midpoints = min(VARIABLE) to max(VARIABLE) by (max(VARIABLE)-min(VARIABLE))/10 /* läuft so nicht*/; run; title; Mein Problem ist also, ich weiß nicht, wie ich das Minimum, Maximum und die Anzahl der Gruppen "bauen kann" auch ein Vorgehen, wie ich das auf Makrovariablen schreibe (%let k = min (Variable) geht auch nicht) würde mein Problem lösen. PS: Proc sgplot, was anscheinend mehr kann, läuft bei mir nicht (EG ) (ERROR: Unable to load the Java Virtual Machine. Please see the installation instructions or system administrator.) Vielen Dank schon einmal für hilfreiche Ideen!


   Profil
AnnaKath
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.12.2006
Mitteilungen: 3818
Wohnort: hier und dort (s. Beruf)
  Beitrag No.1, eingetragen 2018-03-17

Huhu GruenesEi, ich vermute, Du möchtest etwas in der folgenden Art erzeugen: \sourceon SAS /* Ein Beispielsample: Hier nimmst Du natürlich Deines! */ data tmp ; do i=1 to 1000 ; gruppe = floor(ranuni(-1)*10) ; variable = rand('normal') ; output ; end ; drop i ; run ; proc sql ; select count(g) into :groups from ( select distinct gruppe as g from tmp ); quit ; proc sql ; select max(variable), min(variable) into :max, :min from tmp ; quit ; %let width = %sysevalf(((&max.) - (&min.))/&groups.); title 'Histogramme'; proc univariate data = tmp noprint ; var variable ; histogram variable / midpoints = &min. to &max. by &width. ; run ; \sourceoff lg, AK. Anmerkung: NROWS und CLASS im PROC UNIVARIATE sind vermutlich überflüssig, wenn ich Dein Anliegen richtig verstehe; ansonsten frage gerne nach. Wenn Du wirklich 10 Histogramme erzeugst, sehen diese ziemlich - naja - langweilig aus...


   Profil
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Beitrag No.2, vom Themenstarter, eingetragen 2018-03-17

Hallo AK! Vielen lieben Dank. Aus deinem Baustein konnte ich mir das entsprechende Macro bauen. Jetzt kann es losgehen und ich werde mal forschen, was deine Funktionen genau machen, außer funktionieren. Gruppen und 10 waren übrigens nicht das gleiche, aber das habe ich selbst gelöst ;-)


   Profil
AnnaKath
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.12.2006
Mitteilungen: 3818
Wohnort: hier und dort (s. Beruf)
  Beitrag No.3, eingetragen 2018-03-17

Huhu! Aus Interesse: Würdest Du mir zeigen, was Du eigentlich beabsichtigtest? Danke und lg, AK.


   Profil
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Beitrag No.4, vom Themenstarter, eingetragen 2018-03-19

Hi AK, klar, gerne: proc sort data= tmp_variablen out=tmp_variablen (keep=lfnr aufteilung Variable1 Variable2 Variable3 Variable4 Variable5 ) nodupkey ; by kdnr; run; %macro histogramme (datensatz,variable,anz_gruppen); proc sql noprint; select max(&variable.), min(&variable.) into :max, :min from &datensatz. ; quit ; %let width = %sysevalf(((&max.) - (&min.))/10); title &variable.; proc univariate data = tmp_variablen noprint ; class aufteilung; var &variable. ; histogram &variable. / NROWS= &anz_gruppen. midpoints = &min. to &max. by &width. ; run; %mend histogramme; %histogramme(tmp_variablen,Variable1,4); %histogramme(tmp_variablen,Variable2,4); %histogramme(tmp_variablen,Variable3,4); nun würde ich gerne noch Variable1-Variable5 automatisch der Reihe nach aufrufen (sind anders benannt) - weißt du da noch einen Programmschnipsel?


   Profil
AnnaKath
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.12.2006
Mitteilungen: 3818
Wohnort: hier und dort (s. Beruf)
  Beitrag No.5, eingetragen 2018-03-19

Huhu GruenesEi, meinst Du etwas in der folgenden Art? \sourceon SAS %macro sample(var=) ; %put &&&var. ; %mend ; %macro loop ; %local i v ; %do i=1 %to 5 ; %let v = variable&i. ; %sample(var=v) ; %end ; %mend ; %loop; \sourceoff lg, AK.


   Profil
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Beitrag No.6, vom Themenstarter, eingetragen 2018-03-21

Hi AK, vielleicht ;-) Leider habe ich keine Ahnung, was der Code macht. Benennt er die Variablen um? Und wie kriege ich den Originalnamen zurück?


   Profil
AnnaKath
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.12.2006
Mitteilungen: 3818
Wohnort: hier und dort (s. Beruf)
  Beitrag No.7, eingetragen 2018-03-21

Huhu GruenesEi, vielleicht hilft es, wenn Du den Code einmal ausführst und schaust, was er macht? \sourceon SAS (log) variable1 variable2 variable3 variable4 variable5 \sourceoff Die Makro-Funktion "sample" leistet natürlich nicht besonders viel, sie gibt nur den Namen (nach Auflösung von Makrotext) aus, der als symbolischer Parameter "var" übergeben wurde. Die Makro-Funktion "loop" allerdings sollte nützlich für Dich sein. Wenn Du halbwegs verstehst, wie der Code funktioniert, kannst Du diese Funktion für Deine Zwecke so benutzen und ersetzt nur den Aufruf von "sample" durch \sourceon SAS %histogramme(tmp_variablen,&&&v.,4); \sourceoff lg, AK.


   Profil
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Beitrag No.8, vom Themenstarter, eingetragen 2018-03-23

Hallo AK, ich verstehe nicht, worauf das hinausläuft. Aber vielleicht kann ich mir ja eine passende Schleife bauen.


   Profil
gruenesEi
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 26.12.2007
Mitteilungen: 49
  Beitrag No.9, vom Themenstarter, eingetragen 2018-03-23

Hallo AK, aufgrund deiner Anregung habe ich jetzt einen großen Loop gebastelt, der genau macht, was ich möchte. Vielen Dank für deine Hilfe!


   Profil
gruenesEi hat die Antworten auf ihre/seine Frage gesehen.
gruenesEi wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]