2016-03-28 6 views
1

Ist es möglich, dass beim Erstellen einer Tabelle mit SAS proc sql eine Zeichenvariable mit 255 Zeichen abgeschnitten wird? Hat es mit dem Bibliotheksmaschinentyp zu tun?Zeichenlänge im Datenschritt versus proc sql

Ich bin ein PCFILES libname wie folgt aus (beachten Sie die dbmax_text Option):

libname mylib PCFILES PATH = "C:\path\to\my\32bit\MS Acccess.ACCDB" dbmax_text=4000; 

Dann mache ich ein proc sql wie folgt aus:

proc sql noprint; 
    create table work.cbdata as 
    select 
     distinct var1, 
     var2, 
     ... 
    from mylib.var2015 
    where 
     upcase(var1) = "DIQ" 
    order by var1 
    ; 
quit; 

var2 wird bei 255 abgeschnitten immer noch obwohl das Format in der Spalteneigenschaftsansicht als $4000. aufgeführt ist. Wenn ich als Daten Schritt tun dies, die alle die Zeichendaten kommt durch:

data vardb; 
    set mylib.var2015; 
    if var1 = "DIQ"; 
run; 

Ich habe 40 bis 50 SQL-Prozeduren wie in meinem Makro-Bibliothek eingebettet dies, so würde ich es vorziehen, nicht alle Makros Refactoring Benutze Datenschritte (wenn das überhaupt möglich ist). Kennt jemand

a) wenn es eine Option in proc sql gibt, damit es den dbmax_text respektiert.

oder

b) eine Dokumentation darüber, wie SAS verarbeitet die Zeichenlängen in der Tabelle Aussagen von proc sql erstellen?

EDIT - Hinzufügen einiger Screenshots.

SAS denkt die Variablen 4000 Zeichen lang:

sas column properties showing 4000 length and format

+0

FORMAT und Variable LENGTH definieren nicht das gleiche Attribut, obwohl das eine das andere bedeuten kann. –

+0

@data_null_ yep. Ich weiß alles darüber. Das ist etwas anderes. Die Länge und die Formate sagen beide 4000, aber die Zeichenketten selbst enden bei 255. Ich könnte vielleicht ein paar Screenshots machen, wenn das hilft? –

+0

Führen Sie einen Test durch, bei dem Sie die Daten mithilfe der Daten var2015 in den sas-Datensatz einlesen. setze mylib.var2015; Lauf; Sehen Sie, ob das den VAR2 gibt, wie Sie denken, dass es sein sollte. –

Antwort

1

Schuld daran ist die distinct Klausel. Wenn Sie es entfernen, behalten die Spalten ihre Länge und Sie können die Duplikate bei Bedarf mit einer Prozedur sortieren.

+1

Whoa. Bitte sagen Sie mir, dass diese Seltsamkeit nur mit der PCFILES-Engine passiert (Strafe für das Lesen aus einer M $ -Datei?). Hat jemand dies als Fehler beim technischen Support von SAS gemeldet? – Quentin

+1

Ich weiß es nicht. Es könnte eine Kombination von Faktoren sein. Ich würde das OP ermutigen, einen Fehlerbericht sicher zu stellen. –