2011-03-07 9 views
8

मैं एक स्टेटा .do फ़ाइल लिख रहा हूं, और यदि उपयोगकर्ता कुछ पैरामीटर नहीं प्रदान करता है तो डिफ़ॉल्ट मान प्रदान करना चाहते हैं। ऐसा करने के लिए, मैं यह जांचना चाहता हूं कि कोई मैक्रो अपरिभाषित है या नहीं। मैं यह करने के एक hacky तरह से ले कर आए हैं:स्टेटटा: जांचें कि क्या स्थानीय मैक्रो अपरिभाषित है

*** For a local macro with the name value: 
if `value'1 != 1 { 
    ...do stuff 
} 

लेकिन मैं अगर वहाँ यह करने के लिए एक मुहावरेदार तरीका है पता करना चाहते हैं।

उत्तर

8

यदि यह अपरिभाषित है, तो मैक्रो की सामग्री खाली होगी। आप ऐसा कर सकते हैं:

if missing("`mymacroname'") { 
    display "Macro is undefined" 
} 

उद्धरण वास्तव में आवश्यक नहीं हैं, तो मैक्रो एक नंबर शामिल होंगे। missing(x) फ़ंक्शन स्ट्रिंग्स और संख्याओं को संभाल सकता है। यह एक तरह से परीक्षण (x=="" | x==.)

+0

मुझे नहीं लगता कि इस तरह की चीज करने का एक "आधिकारिक" तरीका है। आप stata के साथ आने वाली .ado फ़ाइलों को पढ़ सकते हैं ('C: \ Program Files \ ... ') वे इस तरह के परीक्षण के लिए अलग-अलग चीजें करते हैं। आपको 'cond()' फ़ंक्शन में रुचि हो सकती है। – Keith

+0

मैं इसे अपने मूल प्रश्न में निर्दिष्ट करने में असफल रहा, लेकिन मैं वास्तव में यह जांचने की कोशिश कर रहा हूं कि कोई मैक्रो नाम _not_ अपरिभाषित है या नहीं। यह पता चला है कि 'अगर! गायब है (\ 'macroname') {' इसके लिए काम करता है। बहुत बहुत धन्यवाद! – Wilduck

5

सवाल यह करने के लिए एक मुहावरेदार रास्ता के लिए और Stata प्रोग्रामर भर में पूछा

if "`macroname'" != "" 

अब तक का सबसे अधिक इस्तेमाल किया एक मैक्रो परिभाषित किया गया है कि क्या की कसौटी पर कर रहा है की तरह है। जब मैक्रोज़ को परिभाषित किया जाता है तो मैक्रोज़ में तार होते हैं, और यह सामान्य उपयोग होता है; संख्यात्मक पात्रों का उपयोग सिर्फ एक विशेष मामला है।

+1

रहस्यमय डाउनवोट के बावजूद, यह प्रासंगिक और सही बना हुआ है। डाउनवॉटर के वैकल्पिक दृश्य को देखना दिलचस्प होगा, जो भी हो। –

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