0% found this document useful (0 votes)
537 views

Use SAS Function Propcase

This macro takes a CSV file exported from Google Contacts and processes it to properly case names and remove duplicates before exporting a cleaned file back to Google Contacts. The macro imports the CSV, uses the PROPCASE function to properly case names, removes duplicate contacts, merges email and phone records, and exports the cleaned data back to a CSV. It is designed to make contacts easier to find by name in Google Contacts.

Uploaded by

SASTechies
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
537 views

Use SAS Function Propcase

This macro takes a CSV file exported from Google Contacts and processes it to properly case names and remove duplicates before exporting a cleaned file back to Google Contacts. The macro imports the CSV, uses the PROPCASE function to properly case names, removes duplicate contacts, merges email and phone records, and exports the cleaned data back to a CSV. It is designed to make contacts easier to find by name in Google Contacts.

Uploaded by

SASTechies
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 4

Use SAS function Propcase() to streamline Google Contacts

You might think I am crazy...but I have been using this macro for a long time to fix some contacts in my Google
Contacts...I get a little irritated when I can't find a particular person by email...so I wrote this macro...
This macro takes for Input a .csv file that is exported from Google Contacts and outputs a file that is ready to be imported
to Google Contacts....often I wanted to have Names in the proper case...

Try it yourself and let me know if it needs any tweaks...

Propcase in SAS Documentation.

%macro organizeGoogleContacts(infile,outfile);
/*Import your contacts into SAS */
data googlegroups;
infile "&infile" dlm=',' dsd lrecl=32767 firstobs=2;
length Name      GivenName       AdditionalName Family_Name    Yomi_Name      Given_Name_Yomi           
Additional_Name_Yomi Family_Name_Yomi       Name_Prefix     Name_Suffix     Initials   Nickname         
Short_Name            Maiden_Name   Birthday            Gender Location           Billing_Information        
Directory_Server           Mileage            Occupation       Hobby  Sensitivity         Priority  Subject Notes  
Group_Membership       E_mail_1___Type            E_mail_1___Value         Phone_1___Type          
Phone_1___Value          Phone_2___Type           Phone_2___Value            Phone_3___Type          
Phone_3___Value          Organization_1___Type  Organization_1___Name            Organization_1___Yomi_Name  
Organization_1___Title   Organization_1___Department    Organization_1___Symbol           
Organization_1___Location        Organization_1___Job_Description $ 40;
input Name       GivenName       AdditionalName Family_Name    Yomi_Name      Given_Name_Yomi           
Additional_Name_Yomi Family_Name_Yomi       Name_Prefix     Name_Suffix     Initials   Nickname         
Short_Name            Maiden_Name   Birthday            Gender Location           Billing_Information        
Directory_Server           Mileage            Occupation       Hobby  Sensitivity         Priority  Subject Notes  
Group_Membership       E_mail_1___Type            E_mail_1___Value         Phone_1___Type          
Phone_1___Value          Phone_2___Type           Phone_2___Value            Phone_3___Type          
Phone_3___Value          Organization_1___Type  Organization_1___Name            Organization_1___Yomi_Name  
Organization_1___Title   Organization_1___Department    Organization_1___Symbol           
Organization_1___Location        Organization_1___Job_Description;
run;
 
/* For unnamed contacts use the Email username as the Name */
data names;
set googlegroups;
if name='' and E_mail_1___Value ne '' then name=propcase(lowcase(scan(E_mail_1___Value,1,'@')));/*Format the
names with camelcase*/
else name=propcase(upcase(name));/*Format the names with camelcase*/
run;
 
/* Remove any duplicates by name/email/phone contacts */
proc sort data=names out=googlecontacts nodupkey;
by name E_mail_1___Value Phone_1___Value;
where E_mail_1___Value ne '' or Phone_1___Value ne '';
run;
 
/* Many a times one contact may have been noted down with email contacts only */
proc sort data=googlecontacts out=email nodupkey;
by name;
where E_mail_1___Value ne '';
run;
 
/* Many a times one contact may have been noted down with Phone number only */
proc sort data=googlecontacts out=phone nodupkey;
by name;
where Phone_1___Value ne '';
run;
 
/* Merge the email and Phone contacts by name to get the email and phone on to one record */
data merged;
merge email phone;
by name;
run;
 
/* Export it out to Google csv once again... */
PROC EXPORT DATA= WORK.Merged
            OUTFILE="&outfile"
            DBMS=CSV REPLACE;
RUN;
 
/* Delete all Work datasets proactively */
proc datasets lib=work;
delete _all_;
quit;
%mend organizeGoogleContacts;
 
%let infile=C:\Documents and Settings\SASTechies\Desktop\google.csv;
%let outfile=C:\Documents and Settings\SASTechies\Desktop\GoogleContacts.csv;
 
%organizeGoogleContacts(&infile,&outfile);

You might also like:


 SAS Interview Questions and Answers(2)
 SAS macro to reorder dataset variables in alphabetical order
 SAS Macro to Create a delimited text file from a SAS data set..
 SAS Interview Questions and Answers(1)

Read full article @ http://sastechies.blogspot.com/2009/11/use-sas-function-propcase-to-streamline.html

You might also like