Nur die ersten zwei Ziffern einer Zahl ins neue dataset übernehmen

Ich mal wieder...also, mein Programm, bzw. der entscheidende Teil sieht so aus:

DATA SINGLETAG1NURTAKT;
SET SINGLETAG1TAKT;
KEEP ZHA1-ZHA20;

ZHA1 sei zum Beispiel 511 und ZHA2 sei 711. Wie bekomme ich es hin, dass stattdessen 51 bzw. 71 übernommen werden. Eine Lösung wäre ja beispielsweise, die Werte durch 10 zu teilen und anschließend die Nachkommastelle ohne Rundung abzuschneiden. Problem ist, dass manche Werte eben bereits zweistellig sind und dann auch bleiben sollen.

Ich brauche also einen Test, ob ZHA zwei- oder dreistellig ist und dann eine Funktion, die (falls ZHA dreistellig ist) den Wert durch 10 teilt und die Nachkommastelle abschneidet.

Oder noch besser: Ich brauch immer nur die ersten zwei Ziffern der Werte...egal wie lang die Zahl ist. Nur: wie kann ich das realisieren??

Bitte helft mir!
Danke und viele Grüsse,
S. Grossmann

Hier ein Programm, das von

Hier ein Programm, das von jeder Zahl die ersten beiden Stellen beibehält.

data eins;
zha1=7111;
zha2=711;
zha3=71;
zha4=7;
run;

data zwei(drop=index z);
set eins;
array zha{4} zha1-zha4;
do index=1 to 4;
* berechne die Anzahl der Stellen *;
* ceil rundet nach oben *;
* log10 ergibt die Anzahl der Stellen *;
z=ceil(log10(zha(index)));
put z=;
* Falls mehr als zwei dann teilen *;
if (z > 2) then do;
* 10 hoch (Anzahl Stellen-2) *;
* ergibt den richtigen Divisor *;
zha{index} = int(zha{index}/10**(z-2)); /* für 2 Stellen */
end;
end;
run;

Gruß
Klaus Landwich

Es geht auch einfach

Die Funktion mod = modulo erledigt die Aufgabe ohne viel Mühe. Um die Anzahl der verbleibenden Stellen zu steuern, gibt man als Divisor 10, 100 oder 1000 an, für 1, 2 oder 3 Stellen.

Das Programm von AndreasMangold würde dann so aussehen.

data eins;
zha1=7111;
zha2=711;
zha3=71;
zha4=7;
run;

data zwei(drop=index);
set eins;
array zha{4} zha1-zha4;
do index=1 to 4;
zha{index} = mod(zha{index},100); /* für 2 Stellen */
end;
run;

Gruß Guido

Links oder Rechts

Das Programm mit der Modulo-Funktion gibt die beiden rechten Stellen jeder Zahl zurück, das Programm von Klaus Landwich sowie das Programm von Zahl nach String nach Zahl geben die beiden linken Stellen jeder Zahl zurück.

von Zahl nach String nach Zahl

data eins;
zha1=7111;
zha2=711;
zha3=71;
zha4=7;
run;

data zwei(drop=index);
set eins;
array zha{4} zha1-zha4;
do index=1 to 4;
zha{index} = input (left (put (zha{index}, 32.)), 2.);
end;
run;

Numerisch/Alphanumerische Felder?

Frage: Sind ZHA1-ZHA20 numerische Variablen?

Falls ja, haben Sie Ihre Antwort quasi schon gegeben. If-Abfrage, ob Wert < 100, dann übernehmen, ansonsten durch zehn teilen. Ggf. helfen hier auch ROUND- oder MOD-Funktion.

Sind die Felder alphanumerisch, dann hilft SUBSTR-Funktion.