سؤال

وأنا اتلقى السلوك الغريب (التي تحققها فقط القيم المفقودة) من الحلقة التالية -

<اقتباس فقرة>   

وforeach العاشر من اسم varlist {egen   totalcapx'=total(cap) if unit!=0 & name=="x "، من خلال (السنة)}

ولكن إذا كان لي أن تفعل

<اقتباس فقرة>   

وegen totalcapSOMENAME = مجموع (كاب) إذا   وحدة! = 0 & اسم == "SOMENAME"، من خلال (السنة)

وبعد ذلك يحسب الأرقام التي يفترض أن حساب.

وهذه هي مجموعة بيانات لوحة، وحدة يدل عدد داخل المحرك وحدة مولد معينة (بلغ عدد الوحدات 0 هي الملاحظات على مستوى النبات). يتم تثبيت المتغير غطاء القدرات. يحدد المتغير اسم المصنع. لأنها معقدة لشرح لماذا أنا في حاجة إلى هذه الحلقة، ولكن المشكلة هي بشكل واضح مع الطريقة STATA يفسر foreach.

هل كانت مفيدة؟

المحلول

ولقد حصلت على زوجين من القضايا هنا. الأهم من ذلك، حلقة الأولى هو تقييم كلمة "اسم" بدلا من "س" في جميع أنحاء حلقة الخاص بك. حتى تشغيل الخاص بك القيادة -egen- لها على النحو التالي:

foreach x of varlist name {
     egen totalcapname = total(cap) if unit!=0 and name=="name", by(year)
}

وأشك في هذا هو ما كنت تريد حقا - أعتقد أنك تريد أن تقييم كل بند (المراقبة) في "اسم" الخاص بك متغير منذ كنت تستخدم إذا كان اسم بيان == "x'". So, you need to either get rid of the double quotes around the "x" في -if- الخاص بك بيان أو إعداد ماكرو المحلي وتعيين حلقة egen لتقييم لكل عنصر في الخاص بك متغير "اسم".

والخطأ الثاني أرى في التعليمات البرمجية هو أن كنت في عداد المفقودين الاقتباس إلى الأمام أو اليسار ل"س" في حلقة - يجب أن يصبح "X" "، وليس" س "

.

وهنا مثال على ما أعتقد أنك تريد تشغيله. لأغراض التوضيح، أنا باستخدام الحسابية التي بنيت في "auto.dta" مجموعة البيانات لتشغيل حلقة الخاص بك وبيان -egen- مستقل ... يرجى ملاحظة أنني تسمية المتغيرات في auto.dta إلى أسماء المتغيرات الخاصة بك:

***********
clear
sysuse auto


**
//this section renames the auto.dta variables to the name of your variables//

gen year = [_n]
rename mpg cap
rename price unit
rename make name
**NOTE:  your "SOMENAME" will be "Subaru" in this example!**
**

//here's the loop you should be running//

foreach x of varlist name {
 egen totalcap`x'=total(cap) if unit!=0 & name==`x', by(year) 
 }

//without the loop//

egen totalcapSOMENAME=total(cap) if unit!=0 & name=="Subaru", by(year)

//Display the results//

li name unit cap totalcap* if !missing(totalcapSOMENAME)
***********

وحاول تشغيل هذا المثال في القيام ملف الحسابية. أيضا، عندما يكون لديك هذا النوع من القضايا (حيث يخلق حلقة نتيجة مختلفة من الأمر قائم بذاته)، ودائما حاول كتابة -إعداد تتبع على- بحيث يمكنك أن ترى كيف الحسابية وتقييم حلقة الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top