Saturday 17 February 2018

العرض المحلي في و الحسابية - الفوركس


أساسيات البرمجة ستاتا من أي وقت مضى هناك حاجة للقيام بنفس الشيء لعشرة متغيرات مختلفة، وتمنى أن لم يكن لديك لكتابة ذلك عشر مرات إذا كان الأمر كذلك، ثم هذه المقالة هو لك. إن لم يكن، يوما ما سوف 8212so قد كنت كذلك الحفاظ على القراءة على أي حال. ستاتا لديه كل الأدوات اللازمة لكتابة برامج متطورة جدا، ولكن معرفة عدد قليل منهم يسمح لك لجعل كل يوم القيام الملفات أقصر وأكثر كفاءة. سوف تركز هذه المقالة على تلك الأدوات البرمجة التي، في تجربتنا، أي شخص يستخدم ستاتا بشكل كبير سوف تريد في نهاية المطاف للتعلم. للاستفادة من هذه المادة ستحتاج إلى فهم صلب للبنية الأساسية ستاتا، مثل يمكنك الحصول عليها من ستاتا لدينا سلسلة الباحثين. الجمهور المستهدف الأساسي هو مستخدمي ستاتا بدون خبرة برمجة أخرى. إذا كنت فعلت الكثير من البرمجة ستاتا بالفعل، ويبحثون لتوسيع كوتاغ الخاص بك من تريسكوت تحقق من أدوات البرمجة ستاتا. أفضل قراءة هذه المقالة على الكمبيوتر مع تشغيل ستاتا. إن كتابة الأوامر في الأمثلة بنفسك ستساعدك على ملاحظة جميع التفاصيل والاحتفاظ بها، وإعدادك لكتابة التعليمات البرمجية الخاصة بك. الماكرو ستاتا هو مربع قمت بوضع النص فيه. ثم استخدام ما في المربع في الأوامر اللاحقة. (الحيلة الحقيقية هي الحصول على أمر واحد لتشغيل عدة مرات مع جزء مختلف من النص في المربع في كل مرة - كذلك الوصول الى هناك). وحدات الماكرو جيدا استخدام وحدات الماكرو كوتلوكالكوت. إذا كنت على دراية المتغيرات العالمية والمحلية من لغات أخرى، ستاتاس وحدات الماكرو المحلية المحلية في نفس الطريق. إن لم يكن، فقط يثقون بنا أن وحدات الماكرو المحلية هي الحق في استخدامها. أمر تعريف ماكرو محلي هو: قيمة الاسم المحلي يؤدي هذا إلى إنشاء ماكرو محلي يسمى x ويضع الحرف 1 فيه (وليس القيمة 1 كما هو الحال في وحدة اقتباس إلى اليمين من الصفر على ساليكوت رقم). لاستخدام ماكرو، يمكنك وضع اسمه في أمر محاط بمجموعة معينة من علامات الاقتباس: اقتباس قبل x هو اقتباس واحد الأيسر. وجدت في الزاوية اليسرى العليا من لوحة المفاتيح، تحت تيلدي (). الاقتباس بعد x هو اقتباس واحد الحق. يتم العثور عليها تحت علامة اقتباس مزدوجة (كوت) على الجانب الأيمن من لوحة المفاتيح. يتم التعامل مع وحدات الماكرو بواسطة معالج ماكرو يقوم بفحص الأوامر قبل تمريرها إلى ستاتا السليم. عندما ترى ماكرو (تدل عليه تلك المجموعة المحددة من علامات الاقتباس) فإنه يحل محل الماكرو مع جدوله. وهكذا ما رأى ستاتا السليم كان: الآن محاولة ماكرو أكثر تعقيدا قليلا: x عرض x المحلي x والنتيجة هي 4. ولكن ذلك لأن الأمر عرض يعمل مثل آلة حاسبة. وكان الأمر ستاتا رأى: لذلك قيم 22 وأعطاك الجواب. إذا كنت تريد عرض لوضع شيء على الشاشة دون تقييم ذلك، ووضعه في علامات الاقتباس. ثم عرض سوف التعامل معها مثل سلسلة. يعطي النتيجة 22. ولكن النظر في ما حدث قبل وضعه في علامات الاقتباس: يحتوي الماكرو الخاص بك بت العمل من التعليمات البرمجية ستاتا التي ستاتا تنفيذها بسعادة عند استخدامه. في الواقع لم يكن ستاتا السليم يعرف أو يهتم أن 22 جاء من ماكرو. هذه الميزة تسمح لك لاستخدام وحدات الماكرو في أي مكان على الإطلاق، حتى في تعاريف الكلي. تخزين النتائج في وحدات الماكرو إذا كنت ترغب في وضع نتيجة حساب في ماكرو، وضع علامة يساوي بعد اسم الماكرو: عرض x22 المحلي كوتكسكوت إذا كان الأمر المحلي يحتوي على علامة يساوي، ستاتا تقييم ما يلي قبل وضعه في دقيق. الآن x حقا لا تحتوي على 4 وليس 22 مهما كنت عرضه. تعبيرات ماكرو يمكن لمعالج ماكرو ستاتاس تقييم تعبيرات ستاتا بمعنى أي صيغة يمكنك وضعها بعد علامة تساوي في أمر توليد أو استبدال (ولكن ليس إغن). بناء الجملة هو: حيث التعبير هو التعبير الذي سيتم تقييمه. حاول: النتيجة هي 4. ولكن عرض لم حساب ذلك (ونقلت منع ذلك). بدلا من ذلك، علامة يساوي قبل 22 قال المعالج الكلي لتقييم هذا التعبير ووضع النتيجة في التعليمات البرمجية، لذلك ما كان المنشار السليم ستاتا عرض كوت 4quot. استخدام شائع آخر هو N. الذي سيكون عدد الملاحظات في مجموعة البيانات الحالية (ويمكن استخدامها في الأماكن التي N في حد ذاته غير قادر). يمكن أن تحتوي عبارات ماكرو - ووحدات الماكرو بشكل عام - على وحدات ماكرو أخرى. محاولة: هذا يخبرك معالج الماكرو لطرح واحد من قيمة الماكرو x ثم وضع النتيجة في التعليمات البرمجية. يمكن أن يكون ذلك مفيدا للغاية: على سبيل المثال، إذا كان لديك سنة ماكرو تحتوي على السنة الحالية، فإن السنة الأولى ستكون السنة السابقة للسنة الحالية. غير معروف وحدات الماكرو لسوء الحظ، باستخدام ماكرو تعريف غير موجود لا إنشاء رسالة خطأ. معالج ماكرو ستاتاس فقط يحل محله مع شيء: يعطي نفس النتيجة: قد يسبب هذا الصداع: إذا كنت اكتب اسم وحدات الماكرو ربما كنت تحصل على خطأ بناء جملة عام مع عدم وجود مؤشر على أن ماكرو هو سبب المشكلة. والأسوأ من ذلك، في بعض الظروف فإن الأمر لا يزال يعمل ولكن تعطي نتائج غير صحيحة. كن حذرا جدا لكتابة أسماء وحدات الماكرو بشكل صحيح. بعض الاستخدامات لماكروس خارج الحلقات السبب الرئيسي للتعلم عن وحدات الماكرو هو حتى تتمكن من استخدامها في الحلقات. ولكن هناك أوقات عند استخدام كل منهم بأنفسهم يمكن أن تجعل رمز معقدة أسهل للقراءة. لنفترض أنك تحتاج إلى تشغيل عدد كبير من الانحدارات من أنواع مختلفة، ولكنها جميعا تشمل مجموعة ثابتة من المتغيرات السيطرة. ضع في اعتبارك وضع قائمة متغيرات التحكم في الماكرو: كونترولفارس المحلية عمر موقع الجنس الجنس ماريتالستاتوس هاشيلدرن وهذا سيجعل أوامر الانحدار أقصر: ريج التحكم في الدخل التعليمفارس لوجيت كونترولفارس التعليم المعمول بها الآن افترض أنك تعمل في كثير من الأحيان مع عينات فرعية من مجموعة البيانات الخاصة بك. يمكنك تعريف وحدات الماكرو لهم أيضا: المحلية بلاكومان العرق 1 أمبير الإناث المحلية هسبمان سباق 2 أمبير الإناث ريج التحكم في الدخل الدخلفارس إذا بلاكومان لوجيت توظيف التحكم في التعليمالفارس إذا هيسبان النقطة هنا هو عدم حفظ ضغطات المفاتيح، ولكن لجعل رمز أكثر وضوحا. استخدام وحدات الماكرو يخفي تفاصيل ما المتغيرات التحكم أو كيف يمكن تحديد امرأة سوداء في هذه المجموعة البيانات ويساعدك على التركيز على ما كنت تحاول القيام به. عدم وجود لكتابة تلك التفاصيل في كل مرة أيضا يزيل فرصة للخطأ. يمكنك إجراء تغييرات بسرعة أكبر أيضا: إذا كنت بحاجة إلى إضافة متغير عنصر تحكم لديك فقط لإضافته إلى تعريف ماكرو كونترولفارس بدلا من إضافته إلى كل أمر الانحدار. حفظ ضغطات المفاتيح هو تأثير جانبي لطيف، ولكن تقاوم إغراء لجعل التعليمات البرمجية أقل وضوحا في اسم جعلها أقصر. أخذ بضع دقائق لكتابة رمز واضح هو أكثر كفاءة بكثير من قضاء ساعات تصحيح التعليمات البرمجية التي قصيرة ولكن من الصعب أن نفهم. حلقة فوريش يأخذ قائمة ثم ينفذ الأمر أو مجموعة من الأوامر لكل عنصر من عناصر القائمة. يتم تخزين العنصر الذي يتم العمل عليه حاليا في ماكرو بحيث يمكنك الرجوع إليه في الأوامر. يمكن أن تكون القائمة التي يتم تحميلها على قائمة عامة تحتوي على نص، أو هناك عدة أنواع من القوائم المنظمة (فقط مناقشة فارليستس). بناء جملة حلقة فوريش مع قائمة عامة هو: فوريش الماكرو في قائمة الأوامر (ق) كمثال بسيط جدا: فوريش اللون باللون الأحمر الأزرق الأخضر عرض كوتكولوركوت هنا، اللون هو اسم الماكرو الذي يحتوي على عناصر القائمة. الأحمر الأزرق الأخضر هو القائمة نفسها. ستاتا يكسر القائمة إلى عناصر أينما ترى المسافات، لذلك هذه القائمة تحتوي على ثلاثة عناصر: الأحمر. ازرق و اخضر. قوس مجعد الأيسر () يمثل نهاية الحلقة ويجب أن تذهب على خط الخاصة بها. إذا قمت بكتابة هذا في ستاتا نافذة النتائج التفاعلية يضيف أرقام سطر للأوامر داخل الحلقة، ولكن لا تحتاج إلى كتابتها. لاحظ كيف يتم تنفيذ أي شيء فعلا حتى تكتب قوس مجعد الصحيح، ثم ستاتا يدير كل شيء. عندما لا تحصل على الإخراج التالي: ستاتا يبدأ من خلال تحليل القائمة الخاصة بك وتحديد العناصر التي تحتوي عليها. ثم يضع العنصر الأول (الأحمر) في الماكرو الحلقات (اللون) وينفذ الأمر في الحلقة. وبالنظر إلى الجداول من اللون. يصبح الأمر كريدكوت عرض ويتم طباعة الأحمر على الشاشة. ثم يضع ستاتا العنصر الثاني في الماكرو ويقوم بتشغيل الأمر مرة أخرى، والطباعة الأزرق على الشاشة. ثم يكرر عملية الأخضر. وعندما تفعل ذلك ستاتا يدرك القائمة هي من العناصر و فوريش حلقة كاملة. طوال هذه المقالة سترى أن الأوامر التي هي داخل حلقة هي إندنتيد. هذا يجعل هيكل الحلقات واضحة بصريا ونحن نوصي بشدة أن تفعل الشيء نفسه عند كتابة الملفات. كل ما عليك القيام به هو اضغط تاب قبل أن تبدأ السطر الأول من حلقة. ستاتاس القيام محرر الملفات وأي محرر نص آخر مناسبة للبرمجة سوف المسافة البادئة خطوط لاحقة تلقائيا. (ثيريس لا داعي للقلق حول المسافة البادئة عند العمل بشكل تفاعلي، ولكن في العمل الحقيقي نادرة جدا لاستخدام الحلقات بشكل تفاعلي.) يمكنك استخدام قائمة عامة إلى حلقة على العديد من أنواع مختلفة من الأشياء: المتغيرات والقيم والملفات والمجموعات الفرعية، أي شيء يمكنك وصف باستخدام النص. إذا احتاج العنصر إلى احتواء مسافات، ضعها في علامات اقتباس. حلقة على المتغيرات أكثر شيء شيوعا ل حلقة أكثر من المتغيرات. على سبيل المثال، لنفترض أنك تريد تراجعا عدة متغيرات تابعة مختلفة على نفس المتغيرات المستقلة. التعليمات البرمجية التالية تفعل ذلك، وذلك باستخدام مجموعة بيانات سبيل المثال السيارات التي تأتي مع ستاتا: سيسيوس السيارات فوريش ييفار في ميلا في الغالون سعر النزوح ريج يفار الوزن الأجنبي حلقات على أجزاء من الأسماء المتغيرة النظر في مجموعة البيانات التالية: أنه يحتوي على وهمية (وغير معقول بشكل رهيب ) مجموعة من الناس ودخلهم أكثر من اثني عشر شهرا. هذه هي بيانات لوحة في شكل واسع، لذلك هناك اثني عشر متغيرات الدخل: إنسجان. incFeb. incMar. الخ افترض أنك تريد إنشاء مجموعة المقابلة من المتغيرات مؤشر ما إذا كان الشخص لديه أي دخل في ذلك الشهر. إنشاء واحد منهم هو واضح: جين هاينججان (incJangt0) إذا إنججانلت. ولكن خلق كل اثني عشر في نفس الطريق سيكون مملة. (إذا قمت بالتحقق من ذلك، فإنك تجد أن مجموعة البيانات هذه لا تحتوي على أية قيم مفقودة وبالتالي استبعادها إذا كان إنججانلت ليس ضروريا للغاية، فكر في ذلك تذكير للتفكير دائما في القيم المفقودة عند إنشاء متغيرات المؤشرات هذه.) يمكنك إنشاء كل اثنا عشر متغيرات مؤشر بسرعة وسهولة مع حلقة فوريش: فوريتش الشهر في يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر كان جينمونث (incmonthgt0) إذا إنكمونثلت. يقوم هذا بإعداد قائمة عامة تحتوي على الأشهر، ثم يستخدم تلك الأشهر كأجزاء من الأسماء المتغيرة. لاحظ العملية التي استخدمناها لإنشاء هذه الحلقة: أولا نحن أحسب الأمر استخدام ويد لعنصر واحد من القائمة ثم تم تغييره لاستخدام وحدات الماكرو. هذه عادة جيدة كلما كنت بحاجة إلى كتابة رمز غير تافهة التي تنطوي على وحدات الماكرو. الحلقات فوق فارليستس في حين أن القوائم العامة يمكن أن تحتوي على أسماء المتغيرات، لديك لكتابة جميع الأسماء بشكل فردي. إذا كنت تخبر ستاتا أن القائمة التي تريد تحميلها هي عبارة عن فارتيليست ستاتا الرسمي يمكنك استخدام اختصارات فارليست القياسية، مثل x لجميع المتغيرات التي تبدأ ب x و x-z لجميع المتغيرات من x إلى z. لمراجعة بناء جملة فارليست، راجع القسم المناسب في ستاتا للباحثين. بناء جملة حلقة فوريش على فارليست كما يلي: فوريش ماكرو من فارليست فارس لاحظ أنه في حين يحتوي بناء جملة فوريش لقائمة عامة في. بناء جملة لقائمة منظم له. يستخدم ستاتا في أو لتحديد ما إذا كانت الكلمة التالية هي العنصر الأول من القائمة أو نوع من القائمة. يتلقى الباحثون أحيانا مجموعات البيانات التي تم إنشاؤها في برامج أخرى حيث تكون أسماء المتغيرات في الأحرف الكبيرة. منذ ستاتا يهتم فعلا عن القضية، يمكن أن تكون الأسماء المتغيرة حالة العلوي تكون مملة للعمل مع. أعطى ستاتا مؤخرا أمر إعادة تسمية القدرة على تحويل الأسماء إلى حالة أقل: ولكن هذا مثال عظيم يتيح القيام بذلك مع حلقة فوريش على فارليست على أي حال: فوريتش الاسم القديم من نيونيلور المحلية فارليست (كوتولدنامكوت) إعادة تسمية اسم العائلة النجمة () كل في حد ذاته يطابق جميع المتغيرات، وبالتالي فإن قائمة فوريتش هو حلقة فوق يحتوي على كافة المتغيرات في مجموعة البيانات الحالية. تأخذ الدالة () الأدنى سلسلة، في هذه الحالة جداول الاسم القديم لل ماكرو. ويحولها إلى حالة أقل. لاحظ استخدام علامة يساوي في الأمر المحلي الذي يعرف الاسم المستعار. بحيث يتم تقييم أقل (كوتولدنكوت) ويتم تخزين النتيجة. الحلقات فوق أرقام A حلقات الفوارق (غالبا ما يختصر فورفال) حلقات على الأرقام. بدلا من تحديد قائمة، يمكنك تحديد مجموعة من الأرقام. إلى حد بعيد يتكون النطاق الأكثر شيوعا من رقم البداية ورقم النهاية، ويفترض ستاتا أنه ينبغي الاعتماد من قبل منها بينهما. بناء الجملة هو ببساطة: فورفالويس نهاية بداية ماكرو القيم i15 عرض i يعطي الإخراج: إذا كنت بحاجة إلى الاعتماد بطريقة مختلفة، اكتب المساعدة فورفالويس لمعرفة المزيد من الخيارات. النظر في مجموعة البيانات التالية: مجموعة البيانات هذه مشابهة جدا لمجموعة البيانات من الدخل الشهري الذي فحصناه في وقت سابق، ولكنها تحتوي على دخل سنوي من عام 1990 إلى عام 2010. مهمتك هي مرة أخرى لإنشاء مؤشر عما إذا كان الشخص لديه أي دخل في سنة معينة. باستخدام فالفالويس هذا من السهل جدا القيام به: القيم سنة 199002010 جين هادسيار (incyeargt0) إذا إنسيارلت. وهذا سيكون أكثر صعوبة إذا كانت السنوات لم تشمل القرن (أي 90 بدلا من 1990) لأن ستاتا يعتقد 100 يجب أن يأتي بعد 99 وليس 00. إذا كانت البيانات الخاصة بك تشمل مثل هذه السنوات، والنظر في إضافة القرن قبل القيام بأي عمل جاد معها . الحلقات فوق القيم والمستويات في بعض الأحيان تحتاج إلى حلقة فوق القيم متغير معين يأخذ على. النظر في مجموعة البيانات التالية: وهذا يحتوي على بيانات عن العرق والدخل والعمر والتعليم فئة من مجموعة من الناس الخيالية. لنفترض أنك تريد تراجع الدخل على العمر والتعليم. ولكن يعتقدون أن آثار العمر والتعليم قد تكون مختلفة بالنسبة للأشخاص من مختلف الأجناس. أحد النهج (ربما ليس أفضل واحد) سيكون لتشغيل انحدار منفصل للشعب من كل سباق. عادة ما يمكن أن تفعل ذلك مع: عن طريق العرق: تراجع العمر الدخل الدخل (التعليم إيدوكاتيون يروي ستاتا أن التعليم هو عامل أو متغير الفئوية ويجب أن تتحول إلى مجموعة من المؤشرات. انظر القسم على متغيرات عامل في ستاتا للباحثين إذا كنت ترغب في مراجعة بناء عامل متغير). ومع ذلك، هذه هي بيانات المسح الخيالي وتحتاج إلى تصحيح لتصميم المسح في تشغيل الانحدارات. إذا لم تكن مألوفة مع أوامر المسح ستاتاس، وهذا يعني ما يلي: يتم وصف تصميم المسح باستخدام الأمر سفيسيت (مجموعة المسح). تحتوي مجموعة البيانات هذه على وحدات معاينة أولية تعطى من قبل يسو المتغير وأوزان الاحتمال التي يعطيها الوزن المتغير. الأمر سفيسيت الأمر المقابل (الذي تم تشغيله بالفعل حتى لا تحتاج إلى) هو: سفيسيت يسو بيتويت لديك ستاتا الصحيح لتلك الأوزان في أوامر تقدير، إضافة سفي: بادئة، على سبيل المثال: سفي: ريجريس الدخل الدخل i. education لا يمكنك استخدام المعيار إذا كان بناء الجملة مع بيانات المسح أو الأوزان قد لا يتم تطبيقها بشكل صحيح. بدلا من ذلك، استخدم سوبوبوب () خيار سفي. على سبيل المثال: سفي، سوبوبوب (إذا العرق 1): تراجع العمر الدخل i. education بواسطة: يمكن استخدامها مع سفي: النقطة 4 يعني أنك غير قادر على تشغيل الانحدار الخاص بك لجميع الأجناس التي يستخدمها. ولكن يمكنك أن تفعل ذلك مع حلقة. كل شيء من قبل: هل هو تحديد قيم العرق ومن ثم حلقة عليها، وعند هذه النقطة كنت تعرف كيفية القيام بذلك بنفسك (على الرغم من: هو أسرع عندما يمكنك استخدامه). متغير السباق يأخذ القيم واحد وثلاثة وثلاثة، وبالتالي فإن حلقة مناسبة هي: سباق العرق 13 سفي، سوبوب (إذا راسيراس): ريج دخل العمر i. education ماذا لو كان لديك سباق رابع، وكان عددها تسعة (كوثروتكوت ) بدلا من أربعة هل يمكن ببساطة ترميزه وجعله أربعة. ولكن إذا لم يكن ذلك فكرة جيدة لمشروعك، عليك أن تتحول إلى حلقة فوريش أقل تنظيما: سباق فوريش في 1 2 3 9 سفي، سوبوب (إذا راسيراس): ريج الدخل العمر i. education من ناحية أخرى، وليس لها غير عادية أن تضطر إلى حلقة أكثر من عشرات أو حتى مئات من القيم، أو عدم معرفة في وقت مبكر ما القيم متغير يأخذ على. في هذه الحالة يمكنك أن تدع الأمر ليفلزوف تحديد لهم بالنسبة لك ووضعها في الماكرو. بناء الجملة هو: ليفلزوف فاريابل. المحلية (ماكرو) مستويات السباق، المحلية (السباقات) سوف قائمة جميع القيم من المتغير العرق وتخزينها في ماكرو يسمى السباقات. يمكنك بعد ذلك حلقة على كل منهم مع: سباق فوريش في سباقات سفي، سوبوب (إذا راسيراس): ريج الدخل سن i. education ومع ذلك، فإن هذا الوضع شائع بما فيه الكفاية أن ستاتا كتب رمز خاص لتحليل وحدات الماكرو في قوائم لحلقة. بناء الجملة هو: سباق فوريش من السباقات المحلية سفي، سوبوب (إذا راسيراس): ريج دخل العمر i. education ملاحظة أن السباقات ليست في يقتبس الماكرو المعتادة: النقطة الكاملة لهذا البناء هو تجاوز المعالج الكلي العادي لصالح رمز أسرع في سياق الحلقات. فإنه يجعل فرقا بسيطا جدا، ولكن إذا كنت تفعل ما يكفي من حلقات فإنه سوف تضيف ما يصل. ميزة واحدة سوف تفوت من قبل: هو النص في الإخراج أقول لك التي من قبل مجموعة تعمل حاليا على، ولكن يمكنك إضافته بنفسك. الإصدار التالي من حلقة يضيف أمر عرض إدراج سطرين فارغين ثم يطبع القيمة الحالية لل ماكرو العرق قبل تشغيل الانحدار: سباق فوريش من السباقات المحلية عرض نيولين (2) كوتراسيراسيكوت سف، سوبوبوب (إذا راسرياس): ريج سن الدخل i. education استخدام العرض لطباعة قيمة الماكرو في نقطة معينة في البرنامج الخاص بك هو أيضا أداة مفيدة جدا لتصحيح الأخطاء. ضع في اعتبارك أن هذا مجرد مثال. ومن المحتمل أن تكون طريقة أفضل لدراسة تأثير العرق هي التفاعل مع العرق مع المتغيرات الأخرى. التركيب الجديد للمتغيرات والتفاعلات عامل يجعل من السهل جدا: سفي: تراجع الدخل i. race (c. age i. education) هذا النموذج يحتوي على جميع النماذج السابقة - إذا كنت جديدا على الانحدارات التي تشمل التفاعلات، معرفة لماذا قد يكون ممارسة جيدة. الحلقات المتداخلة يمكن أن تتضمن الأوامر الواردة في حلقة حلقات أخرى: هذا الرمز يخلق الإخراج التالي: يتم تنفيذ الحلقة الداخلية (التي تستخدم j) ثلاث مرات، مرة واحدة لكل قيمة i. وهكذا يعمل الأمر عرض ما مجموعه تسع مرات. لاحظ كيف يتم تمهيد أمر العرض مرتين: مرة واحدة لأنها جزء من حلقة i ومرة ​​واحدة لأنها جزء من حلقة j. عند بدء العمل مع الحلقات المتداخلة من الأهم من ذلك أنه يمكنك بسهولة معرفة ما تحتوي على كل حلقة. النظر في مجموعة بيانات نهائية واحدة: هذا يحتوي على بيانات الدخل الشهري، ولكن للفترة 1990-2010. أسماء المتغيرات هي في شكل incJan1990. incFeb1990. الخ. لتوليد مجموعة من المؤشرات المقابلة تحتاج إلى حلقة على حد سواء أشهر والسنوات: فورفال السنة19902010 فوريتش الشهر في يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر كان جينكونثونثيار (incmonthyeargt0) إذا إنكمونثيارلت. وهذا بالتأكيد عملي، ولكنه مرهق إلى حد ما. سيكون من المحرج بشكل خاص إذا كنت مهتما في التأخر أو يؤدي أو تغييرات مع مرور الوقت: تحتاج إلى رمز لنقول ستاتا أن الشهر قبل يناير 1991 هو ديسمبر 1990. بالنسبة لمعظم الأغراض أسهل إذا فترات زمنية هي ببساطة ترقيم بالتسلسل. وفي هذه الحالة ستكون كانون الثاني / يناير 1990 الفترة 1، كانون الأول / ديسمبر 1990 الفترة 12 و كانون الثاني / يناير 1991. 13 - ولحسن الحظ، من السهل نسبيا تبديلها: الفترة المحلية 1 السنة الفاصلة 1990-1990 الشهر المنتهي في كانون الثاني / يناير آذار / مارس نيسان / مايو حزيران / يونيه آب / أغسطس تشرين الأول / أكتوبر تشرين الأول / إنكمونثيار إنكبيريود إعادة تسمية هادينمونثيار هادينكبيريود periodperiod1 المحلي يستخدم الفترة الماكرو كعداد. ويبدأ تعيين إلى 1. وبالتالي كما الحلقات المتداخلة تبدأ يتم إعادة تسمية incJan1990 inc1 (وبالمثل hadIncJan1990 إلى hadInc1). الأمر المحلي بيريبيروديود 1 يزيد من فترة واحدة: بمجرد أن يتم معالج الماكرو معها ستاتا السليم يرى الفترة المحلية 11. أن يكمل الحلقة الداخلية، لذلك يتم تغيير الشهر إلى فبراير، و inffeb1990 يتم تغيير اسمه إلى inc2. يتم زيادة الماكرو الفترة مرة أخرى (ستاتا السليم الآن يرى الفترة المحلية 21)، يتم تعيين شهر إلى Mar. يتم إعادة تسمية incMar1990 ل inc3. وهكذا دواليك حتى يتم تحويل كل 252 شهرا. (لاحظ أن الفترة من 1990 إلى 2010 شاملة هي 21 عاما.) في إجراء هذا التحويل تفقد القدرة على النظر في متغير وتعرف على الفور ما الشهر التقويم الذي يصف. ولكن أسهل بكثير ل حلقة أكثر. يمكن استبدال الحلقات المتداخلة ب: أهمية اتفاقيات التسمية يحتوي اسم المتغير incJan1990 على ثلاثة مكونات: الشيء الذي يتم ملاحظته (الدخل) والشهر والسنة التي لوحظ فيها. تعتمد الحلقات التي كتبناها على أسماء المتغيرات التي تصف كل ثلاثة بطريقة متسقة: فإنها ستفشل إذا كانت مجموعة البيانات الواردة incJan1990 جنبا إلى جنب مع الدخلJan1991. incjan1992. incJanuary1993 أو incJan94. في العالم الحقيقي مثل هذه الأمور ليست غير عادية. وتمثل مجموعات البيانات من الاستقصاءات تحديا خاصا لأن أسماء المتغيرات غالبا ما تأتي من شكل الاستبيان بدلا من المعلومات التي تحتوي عليها. أخذ الوقت لإعادة تسمية المتغيرات الخاصة بك بطريقة منطقية بالنسبة لك هو فكرة جيدة في بداية أي مشروع، ولكن إذا كنت ستستخدم الحلقات الحيوية التي تقوم بإنشائها وتطبيق اصطلاح تسمية متسقة للمتغيرات. الاستفادة من ستاتاس الحلقات التلقائي الآن بعد أن كنت قد تعلمت كيفية استخدام الحلقات، فإنه يمكن أن يكون مغريا لاستخدامها لكل شيء. نضع في اعتبارنا أن معظم أوامر ستاتا هي بالفعل حلقات (تفعل شيئا لملاحظة واحدة، ثم تفعل ذلك لمراقبة اثنين، وما إلى ذلك) وهذه الحلقات هي أسرع بكثير من أي فوريش أو فوريفالز حلقة. على سبيل المثال، يستخدم ما يلي القيم المنقولة على جميع الملاحظات في مجموعة البيانات وتعيين قيمة y لكل ملاحظة إلى قيمة x لتلك الملاحظة: جن y. فورفالويس i1N استبدال يكسي إذا ني ولكن تحصل على نفس النتيجة بالضبط بسرعة أكبر وبسهولة مع: أحيانا يجد شخص مهمة تتطلب حقا حلقات صريحة على الملاحظات، ولكن نادرة. برمجة ذكية يمكن أن تتحول أحيانا حلقات أخرى في حلقة القياسية على الملاحظات، مما يجعل فوريش أو القيم غير الضرورية. على سبيل المثال، إعادة تشكيل البيانات لوحة شكل واسعة في شكل طويل سوف تقضي على الحاجة إلى العديد من الحلقات. العودة إلى 12 شهرا من بيانات الدخل الأصلية: أذكر بأننا أنشأنا متغيرات مؤشر هادينك مع الحلقة التالية: شهر فوريش في يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر كان إنكومونث (incmonthgt0) إنكمنثلت. ومع ذلك، سوف تحصل على نفس النتائج مع ما يلي: إعادة تشكيل طويلة المؤتمر الوطني العراقي، ط (إد) j (الشهر) سلسلة جين هادينك (incgt0) إذا إينكلت. إعادة تشكيل مجموعة واسعة من هادينك، i (إد) j (شهر) سلسلة (خذ لحظة لفحص البيانات بعد كل خطوة.) إعادة تشكيل مجموعة بيانات كبيرة تستغرق وقتا طويلا، لذلك لا التبديل بين شكل واسع وطويلة شكل طفيفة. ولكن إذا كنت تستطيع تحديد كتلة من الأشياء التي تحتاج إلى القيام بذلك من شأنه أن يكون من الأسهل القيام به في شكل طويل، قد يكون من المفيد إعادة تشكيل في بداية ونهاية تلك الكتلة. آخر مراجعة: 2272012 أدوات برمجة البيانات ستعرض لك هذه المقالة العديد من أدوات البرمجة ستاتا التي لا يحتاجها الجميع ولكنها مفيدة جدا في ظروف معينة. الجمهور المقصود هو ستاتا قدامى المحاربين الذين هم بالفعل على دراية ومريحة باستخدام بناء ستاتا وأدوات البرمجة الأساسية مثل وحدات الماكرو، فوريتش و فورفالويس. إذا كنت جديدا على ستاتا، لدينا ستاتا للباحثين سوف يعلمك الأساسية ستاتا بناء الجملة، وسوف ستاتا البرمجة أساسيات يعلمك أدوات البرمجة الأساسية. وخلافا لهذه المادة، فإنها لا تتحمل أي ستاتا أو تجربة البرمجة العامة. تتضمن الموضوعات التي تمت مناقشتها في هذه المقالة ما يلي: إذا كنت بحاجة إلى التعرف على موضوع معين، فلا تتردد في تخطيه. بعض الأمثلة تستخدم المواد المشمولة سابقا (أي برنامج يحتوي على المتفرعة إذا) ولكن التفسيرات هي بذاتها. كومبوند دوبل كووتس عادة ما تشير بداية ونهاية السلسلة إلى علامات اقتباس مزدوجة (كوتسترينغكوت). يؤدي هذا إلى حدوث مشكلات عندما تحتوي السلسلة نفسها على علامات اقتباس مزدوجة. على سبيل المثال، إذا كنت ترغب في عرض سلسلة هاملت قال كوتو يكون، أو لا يكون. كوت لا يمكن استخدام رمز: عرض كوثامليت قال كوتو يكون، أو لا be. quotquot الحل هو ما ستاتا يدعو يقتبس مزدوجة المركب. عندما يرى ستاتا (اقتباس واحد الأيسر متبوعا باقتباس مزدوج) فإنه يعامل ما يلي كسلسلة حتى ترى كوت (اقتباس مزدوج تليها اقتباس واحد الحق). وبالتالي: عرض كوثامليت قال كوتو يكون، أو لا يكون. كوتكوت في بعض الأحيان قد تتوقع الأمر لتوليد خطأ في ظل ظروف معينة ولكن اختيار تجاهل ذلك. على سبيل المثال، وضع سجل إغلاق في بداية ملف دو يمنع سجل تم فتحه مسبقا من التداخل مع ملف دو الخاص بك، ولكن يولد خطأ إذا لم يتم فتح سجل - على الرغم من عدم وجود سجل فتح هو بالضبط الوضع الذي تريد خلق. يمنع بادئة الالتقاط ستاتا من إيقاف ملف دو الخاص بك إذا كان الأمر الذي تلت ذلك بإنشاء خطأ. الخطأ هو كوتاكابتوردكوت أولا. وهكذا: سوف التقاط سجل إغلاق إغلاق أي سجل مفتوح ولكن لا تحطم ملف القيام به إذا لم يكن هناك ملف سجل مفتوح. يجب استخدام بادئة الالتقاط فقط عندما تفهم تماما الخطأ الذي يولده الأمر أحيانا ولماذا يفعل ذلك - وأنت واثق جدا من أنه يمكن تجاهل هذا الخطأ. عند اكتمال الأمر فإنه يخزن كودكوت كوتورن في أرسي. رمز عودة صفر يعني عموما تنفيذ الأمر بنجاح. يمكنك استخدام التقاط تليها المتفرعة إذا كان على أساس رمز العودة أن ستاتا تفعل أشياء مختلفة اعتمادا على ما إذا حدث خطأ أو لا. المتغيرات في السياقات العددية متغير ستاتا هو متجه: له قيم عديدة. إذا قمت بكتابة قائمة x تحصل على قائمة بجميع قيم x. ومع ذلك، بعض السياقات تدعو إلى العددية. على سبيل المثال، يعرض الأمر عرض شيء واحد فقط. إذا تم استخدام متغير في سياق العددية، يتم استخدام قيمة المتغير للمراقبة الأولى. وبالتالي إذا قمت بكتابة: سوف تحصل فقط على القيمة الأولى من x، كما لو كتبته: نقترح عدم الاستفادة من هذا السلوك، لأنه يجعل من مربكة التعليمات البرمجية. إذا كان الأمر يدعو إلى العددية وتريد أن العددية لتكون القيمة الأولى من x. اكتب x1 بدلا من x فقط. هذا السلوك يمكن أن يسبب مشاكل حقيقية إذا كنت لا تدرك سياق معين يدعو إلى العددية، كما سترى في القسم على المتفرعة إذا. وحدات الماكرو المتقدمة سيناقش هذا القسم العديد من الحيل التي يمكنك استخدامها لتعريف وحدات الماكرو. اكتب مساعدة المحلية لأكثر من ذلك. تخزين قوائم القيم مع ليفلزوف يسرد الأمر ليفلزوف القيم الصحيحة للمتغير ويخزنها في ماكرو محلي. بناء الجملة هو: ليفلزوف فاريابل. محلي (ماكرو) كثيرا ما يستخدم مع شرط إذا لتخزين تلك القيم لمتغير التي تظهر في عينة فرعية معينة. المثال التالي (مأخوذ من أساسيات البرمجة ستاتا) يستخدم ليفلزوف و فوريش حلقة لتشغيل انحدار مرجح المسح بشكل منفصل لكل سباق. هذا يكرر وظيفة من قبل: على الرغم من أن من قبل: لا يمكن استخدامها مع سفي: ليفلزوف العرق، المحلية (سباقات) سباق فوريش من السباقات المحلية عرض نيولين (2) كوتراسيراسيكوت سفي، سوبوبو (إذا راسرياس): ريج دخل العمر i. education منذ ليفلزوف لا تتضمن القيم المفقودة في قائمتها، فإن التعليمات البرمجية أعلاه لن تعمل على الانحدار للملاحظات مع قيمة مفقودة للعرق. وهذا يختلف عن. والتي تعالج الملاحظات مع قيمة مفقودة من قبل المتغير كما مجرد مجموعة أخرى للعمل على. لنفترض أنك طلبت من الأفراد إدراج الفئات الاجتماعية التي ينتمون إليها. يتم ترميز المجموعات كأرقام وتخزينها في المتغيرات المجموعة ط حيث أنا عدد صحيح. وبالتالي إذا قال أحدهم أنها تنتمي إلى المجموعة الخامسة والمجموعة الثالثة (بهذا الترتيب) فإن قيمتها للمجموعة 1 ستكون 5 وتكون قيمتها للمجموعة 2 هي 3. (إذا كانت تسرد مجموعات أقل من العدد الأقصى المسموح به، فستكون مفقودة القيم لبعض المتغيرات المجموعة i.) ثم تريد إنشاء متغير مؤشر لكل مجموعة التي لها قيمة 1 إذا قال الشخص أنها عضو في تلك المجموعة و صفر خلاف ذلك: فورفاش غروبار من مجموعة فارليست مستويات غروبار المحلية ( مجموعات) مجموعة مجموعة من المجموعات المحلية التقاط جمرة ميمغروب 0 استبدال memgroup1 إذا غروبفارغروب هذا الحلقات فوق المتغيرات المجموعة i، أرقام المجموعات التي تم سردها في كل واحد، حلقات فوقهم، يخلق متغير مؤشر لكل مجموعة، ويحدد المؤشر إلى 1 إذا كان الشخص المذكور تلك المجموعة. لاحظ أنك لا تحتاج إلى معرفة في وقت مبكر كم عدد المجموعات يمكن للشخص قائمة أو أعداد المجموعات التي يمكن أن تظهر. الأمر جين قد التقاط أمامه لأنه قد تم بالفعل إنشاء مؤشر لمجموعة معينة: إذا كان شخص ما المدرجة المجموعة 5 كما مجموعته الأولى وشخص آخر المدرجة المجموعة 5 كمجموعته الثانية، سيتم إنشاء mem5 عند معالجة المجموعة 1 و في محاولة لإنشاء Mem5 مرة أخرى عند معالجة group2 يعطي خطأ - ولكن هل تعرف خطأ يمكنك تجاهل. توسيع قوائم متغيرة مع أوناب الأمر أوناب كوتونابريفياتيسكوت a فارليست (كوتكساندكوت تم أخذ) ويضع النتائج في ماكرو. بناء الجملة هو: الماكرو أوناب. فارليست على سبيل المثال، إذا كان لديك متغيرات x1. x2 و x3. ثم: إنشاء ماكرو المحلي يسمى فارس ووضع فيه X2 X2 X3. هذا يمكن أن يكون مفيدا للأوامر التي تتطلب قائمة من المتغيرات ولكن لا يمكن استخدام بناء جملة فارليست، مثل إعادة تشكيل عند الانتقال من طويلة إلى واسعة. قوائم الملفات يمكنك وضع قائمة بالملفات في ماكرو عن طريق إرسال إخراج أمر دير المحلي. بناء الجملة هو: ماكرونام المحلي. دير ديركتوري فيليز كوت باترن يجب أن تتطابق كوت هنا ماكرونام هو اسم الماكرو الذي تريد إنشاءه، الدليل هو الدليل الذي توجد فيه الملفات والنمط الذي يجب أن يطابقه هو شيء مثل كوتكوت لجميع الملفات أو كوت. دوتاكوت لجميع ستاتا مجموعات البيانات. على سبيل المثال، وضع ما يلي قائمة بجميع مجموعات بيانات ستاتا في دليل العمل الحالي في ماكرو يسمى داتافيلز: داتافيلز المحلية: دير. فيليز qu. dtaquot تعقيد واحد هو أن يتم وضع أسماء الملفات في علامات الاقتباس (حتى تتمكن من التعامل مع أسماء الملفات مع المسافات فيها). وبالتالي لعرضها لديك لاستخدام يقتبس مزدوجة المركب: ومع ذلك، هذا لا يسبب مشاكل إذا كنت ترغب في حلقة فوق قائمة الملفات: فوريتش ملف داتافيلز المحلية استخدام الملف، واضحة تفعل شيئا مع الملف تنسيق محتويات ماكرو أنت يمكن تطبيق تنسيق على رقم قبل تخزينه في ماكرو عن طريق إرسال إخراج أمر العرض المحلي الذي يتضمن تنسيقا. على سبيل المثال، يخزن الأمر التالي R-سكارد من الانحدار المدى الأحدث، e (r2). في ماكرو يسمى r2. ولكن باستخدام شكل 5.4f بحيث يكون أربعة أرقام بدلا من ستة عشر. R2 المحلي: عرض 5.4f e (r2) زيادة وخفض وحدات الماكرو غالبا ما تحتاج وحدات الماكرو إلى زيادة بمقدار واحد أو أقل في كثير من الأحيان تنخفض بمقدار واحد. يمكنك القيام بذلك مع و - المشغلين. هذه تذهب داخل اقتباسات ماكرو إما قبل أو بعد اسم الماكرو. إذا تم وضعها قبل، يتم زيادة الماكرو (أو تناقص) ثم النتيجة وضعت في الأمر. إذا تم وضعها بعد، يتم وضع القيمة الحالية لل ماكرو في الأمر ثم يتم زيادة الماكرو (أو إنقاص). جرب ما يلي: x x العرض المحلي x عرض x-- عرض x يمكنك استخدام عوامل الزيادة أو النقصان في أمر محلي لتغيير ماكرو دون القيام بأي شيء آخر، ولكن تأكد من وضع المشغل قبل اسم وحدات الماكرو. For example the following does not increase x : The macro processor replaces the macro x with 1. It then increases x to 2. but then when Stata proper executes the command it sees local x 1 and sets x back to 1. The following does increase x : Branching If Youre familiar with if conditions at the end of commands, meaning quotonly carry out this command for the observations where this condition is true. quot This is a subsetting if . When if starts a command, it is a branching if and has a very different meaning: quotdont execute the following command or commands at all unless this condition is true. quot The syntax is for a single command is: if condition command For a block of commands, its: if condition commands An if block can be followed by an else block, meaning quotcommands to be executed if the condition is not true. quot The else can precede another if. allowing for else if chains of any length: if condition1 commands to execute if condition1 is true else if condition2 commands to execute if condition one is false and condition2 is true else commands to execute if both condition1 and condition2 are false Consider trying to demean a list of variables, where the list is contained in a macro called varlist which was generated elsewhere and could contain string variables: foreach var of local varlist capture confirm numeric variable var if rc0 sum var, meanonly replace varvar-r(mean) else display as error quotvar is not a numeric variable and cannot be demeaned. quot The command confirm numeric variable var checks that var is a numeric variable, but when preceded by capture it does not crash the program if the variable is a string. Instead, if rc0 The condition for a branching if is only evaluated once, so a branching if is a scalar context and the rule that only the first value of a variable will be used applies. In particular, a branching if cannot be used for subsetting. Imagine a data set made up of observations from multiple census years where the data from 1960 is coded in a different way and thus has to be handled differently. What you should not write is something like: if year1960 code for handling observations from 1960 else code for handling observations from other year s Since this is a scalar context, the condition year1960 is only evaluated once, and the only value of year Stata will look at is that of the first observation. Thus if the first observation happens to be from 1960, the entire data set will be coded as if it came from 1960. If not, the entire data set will be coded as if it came from other years. This is not a job for branching if . it is a job for a standard subsetting if at the end of each command. The above code might make sense if it were embedded in a loop that processed multiple data sets, where each data set came from a single year. Then year would be the same for all the observations in a given data set, and the first observation could stand in for all of them. But in that case wed suggest writing something like: if year11960 Conditions for branching if frequently involve macros. If the macros contain text rather than numbers, the values on both sides of the equals sign need to be placed in quotes: foreach school in West East Memorial if quotschoolquotquotWestquot commands that should only be carried out for West High School commands that should be carried out for all schools While Loops foreach and forvalues loops repeat a block of commands a set number of times, but while loops repeat them until a given condition is no longer true. For example: local i 1 while ilt5 display i is equivalent to: forval i15 display i Note that i is increased by 1 each time through the while loop--if you left out that step the loop would never end. The following code is a more typical use of while: local xnew 1 local xold 0 local iteration 1 while abs(xnew-xold)gt.001 amp iterationlt100 local xold xnew local xnewxold-(3-xold3)(-3xold2) display quotIteration: iteration, x: xnewquot The above uses the Newton-Raphson method to solve the equation 3-x30. The algorithm proceeds until the result from the current iteration differs from that of the last iteration by less than .001, or it completes 100 iterations. The second condition acts as a failsafe in case the algorithm does not converge. Note that the initial value of xold is not used, but if it were the same as the initial value of xnew then the while condition would be false immediately and the loop would never be executed. A Stata program is a block of code which can be executed at any time by invoking the programs name. They are useful when you need to perform a task repeatedly, but not all at once. To begin defining a program, type: program define name where name is replaced by the name of the program to be defined. Subsequent commands are considered part of the program, until you type Thus a basic quotHello Worldquot program is: program define hello display quotHello Worldquot end To run this program, type hello . A program cannot be modified after it is defined to change it you must first drop the existing version with program drop and then define it again. Since a do file run in an interactive session cant be sure whats been defined previously, its best to capture program drop a program before you define it: capture program drop hello program define hello display quotHello World Againquot end Programs can be controlled by passing in arguments . An argument can be anything you can put in a macro: numbers, text, names of variables, etc. You pass arguments into a program by typing them after its program name. Thus: hello Russell Dimond runs the hello program with two arguments: Russell and Dimond. But arguments only matter if the program does something with them--the current version of hello will completely ignore them. Programs that use arguments should first use the args command to assign them to local macros. The command: args fname lname puts the first argument the program received in the macro fname and the second in the macro lname. You can then use those macros in subsequent commands: capture program drop hello program define hello args fname lname display quotHello fname lname quot end If you then type: hello Russell Dimond the output will be: Hello Russell Dimond Of course if you type: hello Dimond Russell the output will be: Hello Dimond Russell Its up to you to make sure the arguments you pass in match what the program is expecting. The macro 0 is always defined, and contains a list of all the arguments that were passed into the program. This is useful for handling lists of unknown length. For example, you could take the code you wrote earlier for demeaning lists of variables and turn it into a program: program define demean foreach var of local 0 capture confirm numeric variable var if rc0 sum var, meanonly replace varvar-r(mean) else display as error quotvar is not a numeric variable and cannot be demeaned. quot end To run this program, youd type demean and then a list of variables to be demeaned: You might also want to look at the syntax command, which makes it relatively easy to write a program that understands standard Stata syntax, but syntax is beyond the scope of this article. Returning Values Your program can return values in the r() or e() vectors, just like official Stata commands. This is critical if your program is intended for use with bootstrap or simulate. To do so, first declare in your program define command that the program is either rclass (puts results in the r() vector) or eclass (puts results in the e() vector): program define myprogram, rclass When you have a result to return, use the return command. The general syntax is: return type name value where type can be scalar. local or matrix. value is what you want to return, and name is what you want it to be called. As a trivial example: return scalar x3 When the program is complete, you can refer to the result as r( name ) or e( name ). Thus if youve just run a program containing the above return command, typing: creates a variable var with the value 3 . For a more realistic example, see the last section of Bootstrapping in Stata . Last Revised: 12142010

No comments:

Post a Comment