Hallo zusammen,
hier mal eine erste Lösung von mir:
options fullstimer;
/* Einlesen (hier unter University Edition, mit heruntergeladener Datei) */
data work.words;
length word $60;
infile "/folders/myfolders/wordlist.txt" encoding='wlatin1';
input word $;
run;
/* Buchstaben fuer Abgleich in Reihenfolge bringen */
data work.words2 (keep=word myword laenge);
set work.words end=eof;
laenge = length(word);
array buchstabensuppe{60} $;
do n = 1 to laenge;
buchstabensuppe{n} = substr(word,n,1);
end;
call sortc(of buchstabensuppe{*});
myword = cats(of buchstabensuppe{*});
run;
/* Join, sodass alle Anagramme unter einem Schluessel "myword" stehen */
proc sql;
create table work.wordjoin as
select distinct a.myword, a.word
from work.words2 a, work.words2 b
where a.laenge = b.laenge
and a.myword = b.myword
order by myword
;quit;
/* Ausgabe der Anagramme pro Schluessel "myword" */
data work.ergebnis (keep=erg);
set work.wordjoin;
length erg $300;
by myword;
retain erg;
if first.myword then erg = '';
erg = catx(' ', erg, word);
if last.myword and not first.myword then output;
run;
Ich würde das Ganze gerne generisch machen, sodass ich nicht die Länge 60 bei den Wörtern vorgebe.
Falls mir dazu jemand einen Tipp hat, bin ich gerne offen.
Abgesehen vom Einlesen scheitert das momentan daran, dass es offensichtlich nicht möglich ist, ein Array mit (nach Zeile) variabler Größe zu schaffen.
Ich würde gerne mit z.B. so etwas arbeiten: array meinArray{ length(irgendeineVariable) }
So und nun schaue ich mal in die bereitgestellte Lösung, ich bin mal gespannt, ob ich Ähnlichkeiten finde 🙂
Beste Grüße zu den Feiertagen!
Michael