2011-03-25 18 views
6

आम तौर पर हम उस स्थिति से कैसे निपटते हैं जहां मैक्रो चर को मैक्रो के अंदर संशोधित करने की आवश्यकता होती है;एसएएस मैक्रो वैरिएबल चेंज

%macro test (arg=); 
array arrayone [&arg]; /* This is ok */ 
array arraytwo [&arg+1] /* This is not ok. How to make it work? */ 
... 

हम इन स्थिति का प्रबंधन कैसे करूँ जब मैं चाहता हूँ% परीक्षण (3) और फिर arraytwo आयाम 4 लेने की जरूरत ...: उदाहरण के लिए, मैं इस मैक्रो है लगता है?

उत्तर

3

को बदलें यह% eval का उपयोग करते हुए जब तक आप केवल पूर्णांक गणित की आवश्यकता होती है पर्याप्त है। यदि आपको मैक्रो चर के साथ अस्थायी बिंदु अंकगणित करने की आवश्यकता है, तो आपको इसके बजाय% sysevalf का उपयोग करना चाहिए।

अधिकांश डेटा कदम कार्यों दो तरीकों में से एक के माध्यम से मैक्रो चर के लिए सीधे लागू किया जा सकता:

1. %function() 
2. %sysfunc(function()) 

सबसे अधिक इस्तेमाल किया कार्यों के कई के लिए, वहाँ सटीक मैक्रो समकक्ष हैं, और तुम सब करने की है फ़ंक्शन नाम के सामने एक% जोड़ें। जिन कार्यों में सटीक मैक्रो समकक्ष नहीं हैं उन्हें आमतौर पर% sysfunc() के अंदर कॉल करके मैक्रो वैरिएबल को स्वीकार करने के लिए बनाया जा सकता है। एनबी डेटा चरण फ़ंक्शंस जो आम तौर पर सिंगल कोट्स में लिपटे स्ट्रिंग की अपेक्षा करते हैं, जब तक आप उद्धरण को हटा नहीं देते हैं, तब तक% sysfunc() के माध्यम से मैक्रो कोड के टुकड़े में कॉल किया जाता है। जैसे

data _null_; 
    x = rand('uniform'); 
run; 

एक डेटा चरण में ठीक काम करता है, लेकिन एक मैक्रो चर मैक्रो कोड का एक टुकड़ा में एक ही मूल्य देने के लिए, आप, क्योंकि मैक्रो वातावरण में

%let x = %sysfunc(rand(uniform)); 

यह वह जगह है उनका उपयोग करना होगा एसएएस एक स्ट्रिंग के रूप में वर्दी टेक्स्ट को व्याख्या करता है, जबकि डेटा चरण में एसएएस एक परिवर्तनीय पाठ को चर के नाम के रूप में समझता है।

संबंधित मुद्दे