So you want one number per state per drug?
First let's fix your data step to create an actual SAS dataset.
data have;
input State :$20. Edate :mmddyy. Vthrudate :mmddyy. MATBupie MATMeth MATNal;
format edate vthrudate yymmdd10.;
datalines;
Alabama 08012017 09302017 0 0 1
Alabama 10012017 10012017 1 0 1
Alabama 10022017 01012020 1 0 0
Alaska 09162018 01012019 1 0 0
Alaska 01022019 10032019 1 1 1
Alaska 10042019 01012020 1 0 1
Alaska 01022019 07032020 1 1 1
Michigan 11032020 11042020 1 1 0
Michigan 11052020 04172021 0 1 1
;
Then let's transpose it so that the drug name gets out of the NAME of the variable into the VALUE of a variable instead.
And then re-order the results.
proc transpose data=have out=tall name=drug;
by state edate vthrudate notsorted;
var mat: ;
run;
proc sort data=tall;
by state drug edate ;
run;
Now we can use the FIRST flag to count how many times the value changes per state per drug.
data want;
do until (last.drug);
set tall;
by state drug col1 notsorted;
switch=sum(switch,first.col1 and not first.drug);
end;
keep state drug switch ;
run;
Results:
Obs State drug switch
1 Alabama MATBupie 1
2 Alabama MATMeth 0
3 Alabama MATNal 1
4 Alaska MATBupie 0
5 Alaska MATMeth 2
6 Alaska MATNal 1
7 Michigan MATBupie 1
8 Michigan MATMeth 0
9 Michigan MATNal 1
... View more