मेरे पास कई साइटों के साथ एक डेटासेट है (जैसे नीचे अंश में) जहां XXX के साथ अंत में 3 प्रतिभागी अतिरिक्त डमी प्रतिभागी हैं। मैं चाहता हूं कि इन XXX पेटिड्स को संशोधित किया जाए ताकि वे उस प्रारूप में हों जो मेरे पास "चाहते" डेटासेट में है, अंत में XXX होने का विरोध करते हुए, समूह असाइनमेंट को अपरिवर्तित रखते हुए।

data have;
 input site $ patid $ group $;
 datalines;
ABC ABCPROT01001 A
ABC ABCPROT01002 B
ABC ABCPROT01003 A
ABC ABCPROT01005 A
ABC ABCPROT01006 A
ABC ABCPROT01XXX B
ABC ABCPROT01XXX A
ABC ABCPROT01XXX B
CDF CDFPROT01004 A
CDF CDFPROT01005 A
CDF CDFPROT01006 A
CDF CDFPROT01007 B
CDF CDFPROT01008 A
CDF CDFPROT01009 B
CDF CDFPROT01010 A
CDF CDFPROT01012 A
CDF CDFPROT01013 B
CDF CDFPROT01XXX B
CDF CDFPROT01XXX B
CDF CDFPROT01XXX A
AMD AMDPROT01001 A
AMD AMDPROT01002 B
AMD AMDPROT01003 A
AMD AMDPROT01XXX B
AMD AMDPROT01XXX A
AMD AMDPROT01XXX A
;
run;


data want;
input site $ patid $ group $;
datalines;
ABC ABCPROT01001 A
ABC ABCPROT01002 B
ABC ABCPROT01003 A
ABC ABCPROT01005 A
ABC ABCPROT01006 A
ABC ABCPROT01007 B
ABC ABCPROT01008 A
ABC ABCPROT01009 B
CDF CDFPROT01004 A
CDF CDFPROT01005 A
CDF CDFPROT01006 A
CDF CDFPROT01007 B
CDF CDFPROT01008 A
CDF CDFPROT01009 B
CDF CDFPROT01010 A
CDF CDFPROT01012 A
CDF CDFPROT01013 B
CDF CDFPROT01014 B
CDF CDFPROT01015 B
CDF CDFPROT01016 A
AMD AMDPROT01001 A
AMD AMDPROT01002 B
AMD AMDPROT01003 A
AMD AMDPROT01004 B
AMD AMDPROT01005 A
AMD AMDPROT01006 A
;
run;
sas
0
R. Simian 21 जिंदा 2021, 08:13

2 जवाब

सबसे बढ़िया उत्तर

यह उत्तर दोनों समस्याओं का ध्यान रखता है:

  1. आपके XXX अवलोकन पहले से ही डेटा में हैं
  2. यह केवल XXX अवलोकनों के साथ समूह को संभालता है

कोड:

data have;
 input site $ patid :$12. group $;
 datalines;
ABC ABCPROT01001 A
ABC ABCPROT01002 B
ABC ABCPROT01003 A
ABC ABCPROT01005 A
ABC ABCPROT01006 A
ABC ABCPROT01XXX B
ABC ABCPROT01XXX A
ABC ABCPROT01XXX B
CDF CDFPROT01004 A
CDF CDFPROT01005 A
CDF CDFPROT01006 A
CDF CDFPROT01007 B
CDF CDFPROT01008 A
CDF CDFPROT01009 B
CDF CDFPROT01010 A
CDF CDFPROT01012 A
CDF CDFPROT01013 B
CDF CDFPROT01XXX B
CDF CDFPROT01XXX B
CDF CDFPROT01XXX A
QQL QQLPROT01XXX A
QQL QQLPROT01XXX B
QQL QQLPROT01XXX A
AMD AMDPROT01001 A
AMD AMDPROT01002 B
AMD AMDPROT01003 A
AMD AMDPROT01XXX B
AMD AMDPROT01XXX A
AMD AMDPROT01XXX A
;
run;

data want (drop = n l);
   set have;
   by site notsorted;
   if first.site then n = 0;

   l = substr(patid, length(patid) - 2);
   if not find(l, 'x', 'i') then n = input(l, 3.);
   else n = sum(n, 1);

   substr(patid, 10, 3) = put(n, z3.);

   retain n;
run;
1
draycut 22 जिंदा 2021, 11:08

मुझे लगता है कि आपके पास डेटा सेट में तीन अतिरिक्त ऑब्स नहीं हैं।

ये कोशिश करें

data have;
 input site $ patid $12.;
 datalines;
ABC ABCPROT01001
ABC ABCPROT01002
ABC ABCPROT01003
ABC ABCPROT01005
ABC ABCPROT01006
CDF CDFPROT01004
CDF CDFPROT01005
CDF CDFPROT01006
CDF CDFPROT01007
CDF CDFPROT01008
CDF CDFPROT01009
CDF CDFPROT01010
CDF CDFPROT01012
CDF CDFPROT01013
AMD AMDPROT01001
AMD AMDPROT01002
AMD AMDPROT01003
;

data want;
   do _N_ = 1 by 1 until (last.site);
      set have;
      by site notsorted;
      l = input(substr(patid, length(patid) - 2), 3.);
      output;
   end;
   do l = l + 1 to l + 3;
      substr(patid, 10, 3) = put(l, z3.);
      output;
   end;
run;
1
draycut 21 जिंदा 2021, 09:27