2016-12-07 3 views
1

Ich habe eine Fußnote, die Elemente mit einem Komma auflistet. Die Ausgabe muss an eine .csv gesendet werden. Da eine CSV-Datei durch Kommas getrennt ist, werden die Elemente der Liste beim Öffnen in Excel in verschiedene Zellen ausgegeben. Wie entkommt man beim Export in .csv einem Komma?SAS: Exportieren einer Zeichenfolge, die ein Komma enthält, in eine einzelne Zelle innerhalb einer CSV-Datei

Zum Beispiel

ods csvall file = "test.csv"; 

title 'The first seven letters of the alphabet.'; 
data test; 
    input x $ ; 

    datalines; 
    a 
    B 
    c 
    D 
    e 
    F 
    G 
    ; 
run; 

footnote 'Observe that the letters a, c, and e are lowercase.'; 
proc print data = test; 
run; 

ods csvall close; 

Ich habe versucht, ods escapechar "\"; mit einem Fluchtsymbol zu definieren und die Änderung der Fußnote zu

footnote 'Observe that the letters a\, c\, and e are lowercase.'; 

aber das funktioniert nicht. Es kann sein, dass csvall nicht Teil von ODS ist. Abgesehen davon bin ich mir nicht sicher, was ich sonst noch versuchen sollte.

Dies ist der Text in der durch den obigen Code generierte Datei:

The first seven letters of the alphabet. 
"Obs","x" 
"1","a" 
"2","B" 
"3","c" 
"4","D" 
"5","e" 
"6","F" 
"7","G" 
Observe that the letters a, c, and e are lowercase. 

UPDATE: meine Frage im Lichte der Antworten Reconside, ist die Aufteilung der Fußnote in Differenzzellen SAS zurückzuführen. Beim Import der CSV ist dies auf Excel zurückzuführen. Ich glaube jedoch nicht, dass es eine Möglichkeit gibt, dieses Verhalten automatisch zu überschreiben.

+0

Müssen Sie dazu 'ods csvall' verwenden oder sind Sie offen für eine reine Datenschrittlösung? – user667489

+0

Haben Sie gerade versucht, die Anführungszeichen in den Strings hinzuzufügen, die Sie senden? 'FOOTNOTE '" Liste a, b, c "';' – Tom

Antwort

1

Wenn Sie dem Text der Fußnote einfache Anführungszeichen hinzufügen, werden die Kommata zitiert und können in Feld1 zurückgelesen werden.

ods csvall file = "~/test.csv"; 
title 'The first seven letters of the alphabet.'; 
data test; 
    input x $ ; 
    datalines; 
    a 
    B 
    c 
    D 
    e 
    F 
    G 
    ; 
run; 

footnote "'Observe that the letters a, c, and e are lowercase.'"; 
proc print data = test; 
    run; 
ods csvall close; 


data _null_; 
    infile "~/test.csv" dsd missover; 
    length field1-field2 $60.; 
    input (field:)(:); 
    put (field:)(=); 
    run; 
1

Ich nehme an, Ihr Ziel ist es, eine Datei mit Text zu erzeugen, die wie folgt aussieht:

"The first seven letters of the alphabet." 
"Obs","x" 
"1","a" 
"2","B" 
"3","c" 
"4","D" 
"5","e" 
"6","F" 
"7","G" 
"Observe that the letters a, c, and e are lowercase." 

Dieser Weg verhalten sollten Sie erwarten sind - die Kommata in dem zitierten Text der Fußzeile sollte nicht Wird von den meisten Programmen als Feldtrennzeichen interpretiert.

Ich würde vorschlagen, tun dies einen Daten Schritt unter Verwendung anstatt ods csvall, da es relativ einfach ist zu tun:

data _null_; 
    file "/tmp/test2.csv" dsd; 
    set test end = eof; 
    if _n_ = 1 then put '"The first seven letters of the alphabet."'; 
    put _n_ x; 
    if eof then put '"Observe that the letters a, c, and e are lowercase."'; 
run; 

N. B. Dadurch werden nur Anführungszeichen um Zeichenvariablen hinzugefügt, wenn sie Kommas oder eingebettete Anführungszeichen enthalten (die in doppelte Anführungszeichen gesetzt werden), und Sie müssen die Anführungszeichen um Zeichenfolgenliterale selbst hinzufügen.

Verwandte Themen