PROC SQL'de düzgün çalışmak için bir makro değişkeni alıyorum sorun yaşıyorum ve bu bana mantıklı gelmiyor.Date makro değişkenini PROC SQL'de kullanma
Birincisi, böyle bir sorgu oluşturmak eğer: beklenen ve masanın sonunda bir tarih alanı koyar gibi çalıştığını
PROC SQL;
SELECT
a.*
,'31MAR2016' As EVAL_DATE format=date09.
FROM
myTable a
;
. Eğer bunu yaparsam
Sonra:
%Let Eval_Date = %sysfunc(intnx (month,%sysfunc(inputn(201603,yymmn6.)) ,0,E),date09.);
%Let Eval_date_test = %str(%')&Eval_Date.%str(%')d;
%Put Eval_date_test;
PROC SQL;
SELECT
a.*
,&Eval_date_test As EVAL_DATE format=date09.
FROM
myTable a
;
: Bunu yaparsanız,
'31MAR2016'd
Ama:
%Let testDate = '31MAR2016'd;
%put &testDate;
PROC SQL;
SELECT
a.*
,&testDate As EVAL_DATE format=date09.
FROM
myTable a
;
bu yine değerini gösteren log penceresi ile düzgün çalışır
SAS, hatayla çalışmayı durdurur;
"HATA 22-322 : Yazım hatası, aşağıdakilerden birini bekliyor: bir isim, bir alıntı dize, sayısal sabit, bir datetime sabiti, kayıp değeri, (*, +, -, BTRIM HESAPLANABİLİR CASE, MEVCUT, gİRİŞ dEĞİL, SUBSTRING, TRANSLATE, KULLANICI, ^, ~ PUT
HATA 200-322.:. sembol tanınmaz ve göz ardı edilecektir"
log değeri görüntüler & Eval_date_test'in aynı olması için '31MAR2016'd ikinci örnekte olduğu gibi.Açıklık için iki adımda değişkeni yarattığımı unutmayın, ancak aynı adımı tek adımda oluşturursanız da olur.
Önemli olması durumunda, SAS Enterprise Kılavuzu'nu çalıştırıyorum.
Neden tek tırnak alıntı makro kullanıyorsunuz? Neden sadece normal çift tırnak kullanmıyorsunuz? %% Eval_Date = "% sysfunc (intnx (ay,% sysfunc (inputn (201603, yymmn6.)), 0, E), date9)" d; – Tom
@Tom tek ve çift tırnak. Yani tek tırnak makrolar içindir ve çift tırnaklar makrolar bağlamında normal karakterler olarak ele alınırken dizeleri sınırlamak için kullanılırlar. – OpiesDad
SAS, hangisinin kullandığınızı umursamıyor, ancak tek tırnakların içindeki metinler makro tetikleyiciler için değerlendirilmiyor. Yani '& eval_date' 'makro değişken referansını çözmez ve' '& eval_date' 'yapar. – Tom