****************************************************************************************************
*                                           PROGRAM OVERVIEW
****************************************************************************************************
*
* PROGRAM: ms_caresettingprincipal.sas  
*
* Created (mm/dd/yyyy): 07/31/2014
* Last modified: 04/21/2016
* Version: 1.1
*
*--------------------------------------------------------------------------------------------------
* PURPOSE:
* 	This program will expand the aggregated caresettingprincipal such that it can be used to extract
*  	claims in the MSCDM.  This macro will also process wilcards.
*
*  Program inputs:                                                                                   
*	-dataset containing the caresettingprincipal to expand
* 
*  Program outputs:                                                                                                                                       
*	-dataset with the expanded caresettingprincipal
* 
* PARAMETERS:
*  	-InFile	= Name of the dataset containing the caresettingprincipal to expand
*  	-Var	= Name of the varaible containing the caresettingprincipal variable
*  	-OutFile= Name of the dataset with the expanded caresettingprincipal
*
*  Programming Notes:                                                                                
*                                                                           
*
*
*--------------------------------------------------------------------------------------------------
* CONTACT INFO:name of the file containing the  caresettingprincipal to exand
*  Mini-Sentinel Coordinating Center
*  info@mini-sentinel.org
*
*--------------------------------------------------------------------------------------------------
*  CHANGE LOG: 
*
*   Version   Date       Initials	   Comment (reference ex ternal documentation when available)
*   -------   --------   --------   ---------------------------------------------------------------
*     1.1     04/21/2016   DM		The period is now a valid PDX no matter what enctype is.
*
***************************************************************************************************;

%MACRO ms_caresettingprincipal(InFile=, Var=, OutFile=);

%put =====> MACRO CALLED: ms_caresettingprincipal v1.1;

    %let message=;

	data &OutFile.;
	set &InFile;
	format EncType $2.PDX $1.;

	* Translate the missing value (dot) into an underscore and the wildcard (star) into an A to avoid problems later;
   	&Var. = translate(&Var.,'A','*','_','.');
   	&Var. = upcase(&Var.);

	* All Caresetting and Principal;
	if indexw(&var.,'AAA') or &var. eq "" then do;
		EncType="**"; PDX="*"; output;		
	end;
	else do;
      Numarg=length(compress(&var.," '"))/3;
      do i=1 to Numarg;	  	 
         EncType=substr(compress(scan(&var.,i),"'"),1,2);
		 if EncType="AA" then EncType="**";			* Wildcard for Caresetting;
		 PDX=substr(compress(scan(&var.,i),"'"),3,1);		
       
        if EncType in ("ED","AV","OA") and PDX ne "A" then do;
            call symput('message', "WARNING: In &var., at least one unusual lookup value for PDX was used with ED and/or AV and/or OA");
        end;

		 if PDX="_" then PDX=" ";					* The underscore was used for missing PDX;
		 if PDX="A" then PDX="*";					* Wildcard for PDX;

		 output;
      end;
   	end;
	drop i Numarg;
	run;

%put &message.;

%put NOTE: ********END OF MACRO: ms_caresettingprincipal v1.1********;

%MEND ms_caresettingprincipal;