2016-03-24 4 views
0

ich nach einem Weg, freue mich auf eine sehr lange Zeichenfolge mit diesen Trennzeichen aufgeteilt: '| 'geteilt eine Zeichenfolge eines Wort Begrenzer in sas mit

Die Scan-Funktion scheint nicht Wort Begrenzer zu akzeptieren, so dass, wenn ich

tun
scan(string,3,'| ') 

es bei jedem | und Raum
aufgeteilt werden, anstatt bei jeder '| ' wie ich brauche.

In der Dokumentation sehe ich keinen Modifizierer, der dies erlaubt. http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214639.htm

+0

Ich habe eine Idee: Verwendung transwrd zu ersetzen '| 'by' _' und dann scannen –

+0

Entfernen Sie das Leerzeichen von Ihrem Begrenzer in der Scan-Funktion, und es sollte gut funktionieren. Wenn Sie zusätzlichen Platz benötigen, verwenden Sie einen Streifen oder eine Leiste, um führende Bereiche zu entfernen. – Reeza

Antwort

0

Ich fand es von mir aus

Verwendung tranwrd'| ' von '_'

newstring=tranwrd(string,'| ','_'); 

zu ersetzen, und dann kann ich die Scan-Funktion verwenden normalerweise

xxx=scan(newstringstring,3,'_'); 
+1

Sie sollten eine etwas obskurere Ersatzzeichenfolge in Betracht ziehen. 'FF'X –

+0

gute Idee, ich fand heraus _ war bereits in der Zeichenfolge und ich wechselte zu%, wird aber Ihre Idee versuchen –

1

INFILE DLMSTR hat, wenn sie kombiniert mit Infile magic kann genau das tun, was du brauchst. Ihre Idee sollte gut funktionieren.

enter image description here

data test; 
    input string $50.; 
    cards4; 
This|is | pipe space| delmimited 
This| is| too I believe 
;;;; 
    run; 
data test2; 
    infile cards missover dlmstr='| '; 
    if _n_ eq 1 then input @; 
    array w[5] $64; 
    do while(not eof); 
     set test end=eof; 
     _infile_ = string; 
     input @1 w[*] @; 
     output; 
     end; 
    stop; 
    cards; 
Necessary evil 
    run; 
Verwandte Themen