Ein aufschlussreicher Austausch im Benutzerforum illustriert diesen Fall perfekt mit der Verwendung von Arrays und DO-Blöcken.
Note : Der schuldige Code
Ein Benutzer versucht, Werte von einem Array (ais) unter Bedingung in einer Schleife in ein anderes (trhead) zu kopieren.
Hier ist der eingereichte Code:
array region{22} region_1 - region_22;
array ais{22} ais_1 - ais_22;
array trhead{22} trhead1-trhead22;
do i = 1 to dim(ais) ;
/* La ligne problématique */
if region(i)='HEAD' then do trhead(i)=ais(i); end;
end;
ERROR: The variable type of trhead is invalid in this context.ERROR: Illegal reference to the array trhead.ERROR 73-322: Expecting an =.
Auf den ersten Blick könnte man meinen, dass das Array trhead falsch deklariert ist oder es eine Typinkompatibilität (numerisch vs. Zeichen) gibt.
Note : Die Diagnose: Die Falle des THEN DO
Wie die Forumsexperten schnell erkannten, hat das Problem nichts mit Arrays zu tun. Es ist ein klassischer Interpunktionsfehler.
Die DO-Anweisung ist eine eigenständige Anweisung. Sie muss mit einem Semikolon enden.
Die Korrektur: Ein Semikolon muss direkt nach dem DO hinzugefügt werden.
if region(i)='HEAD' then do; trhead(i)=ais(i); end;
1
IF region(i)='HEAD'THENDO;
2
trhead(i)=ais(i);
3
END;
4
Note : Die Goldene Regel (Regel #1)
Der Benutzer David erinnert in der Diskussion an eine grundlegende Regel, die Anfängern gelehrt, aber von Experten im Eifer des Gefechts oft vergessen wird:
Formatierungstipp
Um diesen speziellen Fehler zu vermeiden, wird empfohlen, THEN DO und die folgende Anweisung nicht in dieselbe Zeile zu schreiben. Übernehmen Sie die folgende Einrückung, um den Fehler optisch offensichtlich zu machen:
if region(i)='HEAD' then do; /* Le point-virgule est bien visible ici */
trhead(i) = ais(i);
end;
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.