Tôi luôn luôn nghĩ rằng %let
tạo ra một biến local
nếu được sử dụng bên trong %macro . . . %mend
tại sao% không cho phép tạo biến macro cục bộ?
Nhưng khi tôi chạy mã này, nhật ký SAS lãm GLOBAL TESTVAR value1
%let testVar = value2;
%macro test;
%let testVar = value1;
%mend;
%test
%put _all_;
Vì vậy, tôi không thể hiểu tại sao giá trị của biến toàn cục testVar
đã thay đổi thành value1
. Tôi đã mong đợi nó không thay đổi value2
. Câu lệnh %let
bên trong %macro
sẽ chỉ ảnh hưởng đến bảng biểu tượng cục bộ.
Khi bộ xử lý vĩ mô thực hiện một tuyên bố chương trình vĩ mô có thể tạo ra một biến vĩ mô, bộ vi xử lý vĩ mô tạo ra các biến trong bảng ký hiệu cục bộ nếu không có biến vĩ mô có cùng tên có sẵn để nó
Cảm ơn, tôi hiểu rồi. Tôi đã nhầm lẫn với ví dụ SAS: '% let new = inventry; % macro name2; % let new = report; . . ' – Alex
@Alex Bạn phải khai báo một cách rõ ràng các biến trong macro như là cục bộ (nếu bạn mong đợi chúng là cục bộ). Không làm như vậy có thể dẫn đến một số mã khó gỡ lỗi nếu macro của bạn xảy ra để gọi các macro khác (hoặc đang được gọi bởi macro khác). –