2016-11-16 1 views
2

Je travaille avec des données d'abonnement pour un magazine et j'ai compilé un jeu de données qui inclut les dates de début et de fin de l'abonnement de chaque client. L'ensemble de données comprend un ID unique, une colonne First_Date indiquant le jour du début de l'abonnement et une colonne Last_Date indiquant le jour de la fin de l'abonnement.Comment puis-je compter le nombre d'abonnements actifs par trimestre dans SAS?

La tâche consiste à compiler le nombre de clients ayant des abonnements actifs pour chaque trimestre du premier trimestre de 2000 au deuxième trimestre de 2015. J'ai mis en place un ensemble de données qui a deux variables: Quarter_Start (le premier jour de chaque trimestre) et Quarter_End (le dernier jour de chaque trimestre). Je voudrais maintenant ajouter une troisième colonne à cet ensemble de données qui inclut les comptes d'abonnements actifs. J'ai essayé d'utiliser des instructions de compte conditionnelles dans proc sql en vain.

Voici le code (défaut) que je travaille sur:

proc sql; 
    create table Want as 
      select a.Quarter_Start, 
        a.Quarter_End, 
        count(b.First_Date <= a.Quarter_Start & 
          b.Last_Date >= a.Quarter_end) as Customer_Count 
     from Int.Quarterly_Count as a, Int.Subscription_Dates as b; 
quit; 

Merci à l'avance!

+0

Pouvez-vous fournir des exemples de jeux de données, s'il vous plaît? – superfluous

Répondre

0

Utilisez SUM() au lieu de compter et d'ajouter GROUP BY.
Cela devrait compter les clients actifs pour le trimestre complet.

proc sql; 
    create table want as 
    select a.Quarter_Start 
     , a.Quarter_End 
     , sum(b.First_Date <= a.Quarter_Start 
      and b.Last_Date >= a.Quarter_end) as Customer_Count 
    from Int.Quarterly_Count as a 
     , Int.Subscription_Dates as b 
    group by 1,2 
    ; 
quit; 
+0

Parfait - merci! –