Variableneingabe über ein Fenster

Hallo,

hab schon wieder ein Problem:

Über %display wird ein Fenster erzeugt. In dieses Fenster sollen dann numerische Werte aber auch ein Datei und mehrere Variablennamen eingegeben werden. Hier ein Auszug aus dem %window:

#25 @28 "Bitte geben Sie die Woche der letzten Visite an:" color=black
#27 @28 "Ihre Wahl?" color=black @40 wahle 30 required=no color=red
#29 @28 "In welchen Abständen sollen die Visiten ausgewertet werden?" color=black
#31 @28 "Ihre Wahl?" color=black @40 wahls 30 required=no color=red
#33 @28 "Ist die Auswertungsvariable numerisch (n) oder eine Charactervariable (c)?" color=black
#35 @28 "Ihre Wahl?" color=black @40 wahlt 30 required=no color=red

Wie lege ich nun fest, daß wahle und wahls numerisch sind, wahlt aber eine Character-Variable?

VG Elfriede

Hallo SAS-FIDI, über das

Hallo SAS-FIDI,

über das Fenster befüllen Sie Makrovariable -diese beinhalten grundsätzlich einen Charakter-String.
Die Richtigkeit der Eingabe müssen Sie nachher über Programmcode checken.

frdl Grüße in Richtung Heimat
Mk

Ups, doppelt. Bitte eines

Ups, doppelt. Bitte eines löschen!

VG Elfriede

Ein Beispiel zur

Ein Beispiel zur Datumseingabe:

data _null_;
window fetch
rows = 10
columns = 46
irow = 4
icolumn = 25
color=black
group=query1
#3 @5 'Bitte ein Datum eingeben: ' color=yellow
#3 @28 yyyymmdd $8. attr=rev_video required=yes autoskip=yes color=yellow
#4 @27 '(yyyymmdd) ' color=yellow
group=short
#3 @5 'Die Laenge muss 8 Zeichen betragen.' color=yellow
#4 @5 'ENTER drücken zum fortsetzen.' color=yellow
group=check
#3 @4 'Is ' color=yellow
#3 @7 yyyymmdd $8. protect=yes attr=underline color=yellow
#3 @27 'correct? (y/n) ' color=yellow
#3 @42 yn $1. attr=rev_video required=yes color=yellow
;

* default initial values ;
ccyymmdd = '';

tryagn1:

display fetch.query1 blank;

if length(yyyymmdd) lt 6 then
do;
display fetch.short blank;
goto tryagn1;
end;

therest:

display fetch.check blank;

if lowcase(yn) ne 'y' then goto tryagn1;

call symput('YYYYMMDD',compress(yyyymmdd));
call symput('InternalDate',input(compress(yyyymmdd),yymmdd8.));
call
symput('FormattedDate',put(input(compress(yyyymmdd),yymmdd8.),mmddyy10.)
);

stop; * only take one entry ;

run;

%put NOTE: Die Eingabe lautete: &YYYYMMDD;
%put NOTE: Das interne Datum lautet: &theDate;
%put NOTE: Das formatierte Datum ist: &FormattedDate;

data sample;
name = 'Barney';output;
name = 'Fred';output;
name = 'Betty';output;
name = 'Wilma';output;
run;

title 'Das Beispiel mit dem Datum' "&FormattedDate";
proc print data=sample;
run;

MfG // Martin Schaefer

Schon klar, daß es eigentlich

Schon klar, daß es eigentlich eine Character-Variable sein müßte. Aber, wie erklärt sich dann folgendes:

%window test color=black
#10 @28 "Bitte geben Sie eine Zahl zwischen 1 und 5 ein!" color=white
#15 @28 "Ihre Wahl?" color=white @40 wahl 30 required=yes color=white
#50 @28 "Bitte die Returntaste drücken." color=pink;

%macro los;
%display test;
%if &wahl.=<5 %then %put Sie haben die Zahl &wahl eingegeben;
%if &wahl. >5 %then %put Fehlerhafte Eingabe Zahl zu groß;
%if &wahl='3' %then %put Treffer!;
%mend;

%los;

Hier ergibt sich bei Eingabe einer 3 die folgende Meldung im Log:

MLOGIC(LOS): %IF condition &wahl='3' is FALSE

Läßt man die Anführungszeichen weg, gibt es folgendes Ergebnis im Log:

MLOGIC(LOS): %IF condition &wahl=3 is TRUE
MLOGIC(LOS): %PUT Treffer!
Treffer!

Auch die Operanden > und < werden sauber abgearbeitet. Das heißt doch, daß Variablen wie numerische abgearbeitet werden, oder?

VG SAS-Fidi

Ihre Ausgangsfrage

Ihre Ausgangsfrage lautete:
Wie lege ich nun fest, daß wahle und wahls numerisch sind, wahlt aber eine Character-Variable

Antwort:
das können Sie nicht festlegen, Makrovariablen beinhalten Text.

Bei Makrovariablen benötigen Sie keine Hochkommata, deshalb liefert die Abfrage %IF condition &wahl=3
TRUE wenn die Makrovariable mit 3 gefüllt ist. Wenn Sie %let wahl='3'; eingeben (oder über das Fenster einlesen)
kommt bei der ersten Abfrage das Ergebnis TRUE heraus.

Deshalb müssten Sie sicherstellen, dass der Anwender das gewünschte -also eine Zahl- eingibt.

Zu der zweiten Frage:
Auch die Operanden > und < werden sauber abgearbeitet. Das heißt doch, daß Variablen wie numerische abgearbeitet werden, oder?
die Vergleiche funktionieren, man kann aber auch charakter Variablen miteinander vergleichen. Das Makrovariable nicht wie numerische Variable verarbeitet werden sehen Sie an %let wahl=&wahl+1; liefert nicht das gewünschte. Aber
%let wahl=%eval(&wahl+1); und in wahl wird das Ergebnis der addition gespeichert.

Wahrscheinlich verstehe ich Ihr Problem nicht!

frdl Grüße Mk