قم بإنشاء متغير وهمي بناءً على عدد مرات الظهور المتغيرة باستخدام SAS
-
20-12-2019 - |
سؤال
أحاول إنشاء متغير وهمي A للإشارة إلى عدد مرات ظهور المعرف.إذا ظهر المعرف مرتين بالضبط، فإن A يساوي 0؛إذا ظهر المعرف أكثر من مرتين، فإن A يساوي 1.
الإخراج المطلوب هو كما يلي:
ID YEAR A
1078 1989 0
1078 1999 0
1161 1969 0
1161 2002 0
1230 1995 0
1230 2002 0
1279 1996 0
1279 2003 0
1447 1993 0
1447 2001 0
1487 1967 1
1487 2008 1
1487 2009 1
1678 1979 0
1678 2002 0
الكود الخاص بي هو:
data new data;
set data;
by ID YEAR;
if First.ID then count=0;
count+1;
run;
data newdata;
set newdata;
by ID YEAR count;
if sum(count)=3 then A=0;
if sum(count)>3 then A=1;
run;
لكن الإخراج غير صحيح.
المحلول
لا يمكنك استخدام sum(count) لجمع العدد عبر ملاحظات متعددة.بدلاً من ذلك، تحتاج أولاً إلى حساب الملاحظات، ثم دمج الأعداد في البيانات الأصلية.
حل خطوة البيانات
data newdata;
set data;
by ID YEAR;
if First.ID then count=0;
count+1;
if last.id then output;
drop year;
run;
if last.id then output
يعني أن البيانات الجديدة لن تحتوي إلا على الملاحظة الأخيرة لكل معرف.نريد ذلك لأن الملاحظة الأخيرة تحتوي على عدد الملاحظات لكل معرف.
تقوم هذه الخطوة بدمج "بيانات" البيانات الأصلية مع الأعداد من "البيانات الجديدة" وحساب أ.
data newdata2;
merge data newdata;
by ID;
if count=2 then A=0;
if count>2 then A=1;
drop count;
run;
حل بروك SQLيمكنك القيام بذلك بسرعة أكبر باستخدام proc sql:
proc sql;
create table newdata as
select id, year, (case when count(*) = 2 then 0 else 1 end) as a
from data
group by id;
quit;
group by id
يعني أن الإحصائيات الموجزة مثل count() يتم حسابها بواسطة المعرف، وبالتالي فإن count(*)
يعني عدد الملاحظات في كل معرف. (case when count(*) = 2 then 0 else 1 end) as a
يخلق متغير أ.إذا كان عدد المعرف المحدد هو 2، فإن a يأخذ القيمة 0، وإلا يأخذ a القيمة 1.