Proc Cluster bzw. Proc Tree

Hallo, hat hier vielleicht irgendeiner Erfahrung mit den oben genannten Prozeduren???Falls ja: ich hätte da ein paar Fragen, die für jemanden mit Erfahrung höchstwahrscheinlich trivial sind....

einfach mal stellen, die Fragen

dann werden wir sehen.

Clusteranalyse

Ich habe eine Clusteranalyse auf der Basis einer 911*911- Distanzmatrix durchgeführt. Anhand der F- und t²- Werte erscheint es sinnvoll, die Beobachtungen in 14 Cluster zu zerlegen.
Nun zu meinem Problem: Cluster 1 und Cluster 2 enthalten bei mir über 400 Beobachtungen, die anderen dementsprechend nur 1-13. Wie kann ich die Unterschiede der Werte in der Matrix stärker herausbringen? Ist im Programm für die Berechnung der Distanzmatrix etwas zu ändern? Oder in jenem für die Clusteranalyse??
Ich habe auch sehr viele Ties...
Wäre sehr dankbar, wenn mir jemand weiterhelfen könnte...

Programmcode

Guten Morgen,

ich bin jetzt zwar nicht der große Cluster-Experte, aber welches Verfahren wird denn direkt angewendet? Vielleicht könnten wir den Programmcode bekommen, dann lässt sich das etwas besser beurteilen.

Habe die Fragestellung auch noch nicht ganz verstanden, geht es darum, in etwa gleich große Cluster zu erhalten? Dann bietet sich u.U. das Ward-Verfahren an, dieses tendiert zur Bildung ähnlich großer Cluster.

Gruß R. Kolbe

Ich hoffe, damit kannst Du mir weiterhelfen...

/*dieser File dient der Clusteranalyse von Haushaltstätigkeiten. Zuvor muss mit
Praepdistanzsingle o.a. eine Distanzmatrix produziert werden. Diese steht dann in
SASUSER als SINGLEDISTANZ oder anderem Namen und wird zunächst übernommen*/

DATA SINGLEDISTANZ1;
SET SASUSER.SINGLEDISTANZ91_92;
RUN;

PROC IML;
USE SINGLEDISTANZ1;
READ ALL VAR _NUM_ INTO DIST;
DIST1 = DIST+1000*I(911);
HILF = {[911] 1}` * {[911] 1} -I(911);
DIST2 = (DIST-120*HILF);
NULL = {[911] 0}` * {[911] 0};
DIST3 = DIST2<>NULL;
DIST4 = DIST3##2;

MIN = DIST1[><,><];
PRINT MIN;

CREATE SINGLEDISTANZ2 FROM DIST4;
APPEND FROM DIST4;
QUIT;

DATA SINGLES;
SET SASUSER.SINGLETAG1TAKT;
RUN;

DATA IDENT;
SET SINGLES;
KEEP PERSNR;
RUN;

DATA DISTANZ (TYPE=DISTANCE);
MERGE IDENT SINGLEDISTANZ2;
/*Je nachdem ob das IML zugeschaltet ist, muss hier zwischen
Singledistanz2 und Singledistanz1 gewechselt werden*/
RUN;

PROC CLUSTER DATA=DISTANZ METHOD=Average OUTTREE=TREE PSEUDO /*NOPRINT*/ ;
ID PERSNR;
RUN;

PROC TREE DATA=TREE OUT=NEW NCLUSTERS=14;
ID PERSNR;
RUN;

PROC SORT;
BY PERSNR;
RUN;

DATA SINGLECLUS;
MERGE NEW SINGLES;
BY PERSNR;
DROP /*ZHA1-ZHA288*/ IDTAG IDHH WT1 WT2 ID1 IDTAG;
IF ALTER>100 then delete;
IF CLUSTER=1;
RUN;

PROC FREQ DATA=NEW;
TABLES CLUSTER;
RUN;

Formatierung

den SAS-Code immer so einschließen, dann können ihn die anderen auch lesen:

<sascode>
/* hier kommt der SAS-Code */
</sascode>