Verwenden Sie countw()
, um die Anzahl der Werte in einer Zeile zu zählen, und scan()
, um sie auszuwählen.
Beide haben eine letzte optionale Variable, um das Trennzeichen zu spezifizieren, welches in Ihrem Fall ,
ist.
data Loans (keep= AccountNo Loan);
infile datalines truncover;
Input @1 AccountNo 3. @17 LoanList $250.;
if length(LoanList) gt 240 then put 'WARNING: You might need to extend Loans';
label AccountNo = 'Account Number' Loan = 'Loans';
do loanNo = 1 to countw(LoanList, ',');
Loan = scan(LoanList, loanNo, ',');
output;
end;
datalines;
123 abc, def, ghi
456 jkl, mnopqr, stuv
789 w, xyz
;
proc print data=Loans label noobs;
run;
Der umgekehrte Vorgang erfordert verschiedene Techniken.
Um die Verarbeitung von by AccountNo
zu ermöglichen, müssen wir zunächst ein SAS-Dataset aus der Eingabe erstellen und dieses dann mit einer set
-Anweisung zurückgelesen.
data Loans;
infile datalines;
input @1 AccountNo 3. @5 Loan $25.;
datalines;
123 15-abc
123 15-def
123 15-ghi
456 99-jkl
456 99-mnopqr
456 99-stuv
789 77-w
789 77-xyz
;
data LoanLists;
set Loans;
by AccountNo;
Jetzt ist Ihre Loanlist lange genug schaffen und das Standardverhalten von SAS überschreiben alle Variablen für jede Beobachtung neu zu initialisieren (= Datenreihe).
format Loanlist $250.;
retain Loanlist;
Sammeln Sie alle Kredite für ein Konto, trennen Sie sie mit Komma ein Leerzeichen.
if first.AccountNo then Loanlist = Loan;
else Loanlist = catx(', ',Loanlist,Loan);
if length(LoanList) gt 240 then put 'WARNING: you might need to extend LoanList';
halten nur die vollständige Liste pro Konto.
if last.AccountNo;
drop Loan;
proc print;
run;
Mögliche Duplikat [SAS Transponieren Comma Separated Feld] (http://stackoverflow.com/questions/28358093/sas-transpose-comma-separated-field) – Reeza