Un intercambio instructivo en el foro de usuarios ilustra perfectamente este caso con el uso de los Arrays y los bloques DO.
Note : El Código Culpable
Un usuario intenta copiar valores de un array (ais) a otro (trhead) bajo condición, dentro de un bucle.
Aquí está el código enviado:
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 =.
A primera vista, se podría creer que el array trhead está mal declarado o que hay una incompatibilidad de tipo (numérico vs carácter).
Note : El Diagnóstico: La trampa del THEN DO
Como identificaron rápidamente los expertos del foro, el problema no tiene nada que ver con los arrays. Es un error de puntuación clásico.
La instrucción DO es una instrucción por derecho propio. Debe terminar con un punto y coma.
La corrección: Hay que añadir un punto y coma justo después del DO.
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 : La Regla de Oro (Rule #1)
El usuario David recuerda en la discusión una regla fundamental enseñada a los principiantes, pero a menudo olvidada por los expertos en el fragor de la acción:
Consejo de formato
Para evitar este error específico, se recomienda no escribir el THEN DO y la siguiente instrucción en la misma línea. Adopte la siguiente indentación para hacer el error visualmente evidente:
if region(i)='HEAD' then do; /* Le point-virgule est bien visible ici */
trhead(i) = ais(i);
end;
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.