2016-07-14 8 views
1

Eine sehr grundlegende Frage.SAS So verketten Sie Strings mehrmals in der gleichen Variablen während eines Datenschritts

Wie kann ich eine Variable in einem Datastep so nicht ändern?

data want; 
    aaaaa='['; 
    aaaaa=cats(aaaaa,'hello'); 
    aaaaa=cats(aaaaa,']'); 
    put aaaaa; 
run; 

aaaaa wird gleich zu '[' erwarte ich '[Hallo]'

Ich brauche aaaaa in mehreren Stufen zu definieren, weil ich konstruieren müssen aaaaa mit do-Schleifen (mit unvorhersehbare Länge), kann ich aaaaa nicht in einem Schritt definieren.

Danke!

+0

Möchten Sie wirklich für aaaaa Variable setzen? Der Wert für aaaaa in Tabelle will gleich [Hallo]. –

+1

@andrey_sz Ja, das tue ich. Es ist für den Aufbau einer JSON-Datei. –

+0

Sieh dir auch 'call cats' an, da es dir erspart,' aaaaa = cats (aaaaa, ......) ' – Longfish

Antwort

3

Beim ersten Aufruf von aaaaa wird SAS der Variablen eine Länge zuweisen. In diesem Fall length aaaaa $1, da Sie nur ein Zeichen zuweisen. SAS-Datentypen sind nicht dynamisch. Starten Sie Ihren Datastep, indem Sie Ihrer Variablen eine feste Länge zuweisen, die die maximal erwartete Länge z.

data want; 
    length aaaaa $300; 
    aaaaa='['; 
    aaaaa=cats(aaaaa,'hello'); 
    aaaaa=cats(aaaaa,']'); 
    put aaaaa; 
run; 
+0

Ich war mir ziemlich sicher, dass es etwas Dummes war, das ich vermisste :-). Vielen Dank! –

1

Sie können attrib oder format Anweisung Daten Schritt:

data want; 
    attrib 
     aaaaa format=$200.; 
    aaaaa='['; 
    aaaaa=cats(aaaaa,'hello'); 
    aaaaa=cats(aaaaa,']'); 
    put aaaaa; 
run; 
0

Wie pro meine Kommentare, hier ist eine alternative Möglichkeit call cats verwenden.

data want; 
length aaaaa $300; 
call cats(aaaaa,'['); 
call cats(aaaaa,'Hello'); 
call cats(aaaaa,']'); 
run;