Bonjour,
Je rencontre un problème avec ma fonction INTCK. Les données de sortie que j'obtiens ne sont pas toutes bonnes.
Voici mon code:
PROC SQL;
CREATE TABLE VENTES_CAMPAGNE AS
SELECT DISTINCT
TVEN.SIREN,
TRESUL.UTILISATEURID,
TVEN.OFFRE_VENTES,
TVEN.FAMILLE_VENTES,
TVEN.DATE_VALIDE2 AS DATE_ED_VENTE,
TVEN.PRI_IC AS MONTANT_PRI_VENTE,
TRESUL.DATEFIN_CAMPAGNE,
intnx('dtmonth',TRESUL.DATECREATION_LEAD,+4,'SAMEDAY') AS DFC_3 FORMAT=DATETIME16.,
TRESUL.DATECREATION_LEAD
FROM WORK.VENTES_TOTALE TVEN
INNER JOIN WORK.CIBLAGE TRESUL ON (TRESUL.SIREN = TVEN.SIREN)
GROUP BY 1,2,3
;
QUIT;
et voici les données que j'obtiens:
Les 3 premières lignes sont bonnes mais pas la 4ème ... etc
Savez-vous pourquoi?
Certaines de mes dates DFC_3 sont bonnes et d'autres non ...
You show a column named DATECREATION_LEAD. Is this the column from data set TRESUL?
La colonne DATECREATION_LEAD fait bien partie de ma table TRESUL, mais TRESUL est un rassemblement de d'autre table
TRESUL correspond à ma table CIBLAGE à la fin
Les voici :
PROC SQL;
CREATE TABLE LISTE_LEADS AS
SELECT DISTINCT
TCAMP.*,
TLEAD.PARENTID,
TLEAD.UTILISATEURID,
TLEAD.PORTEFEUILLEID,
TLEAD.IDLEAD,
TLEAD.REFERENCE,
TLEAD.NOMBREESCALADE,
TLEAD.DATECREATION AS DATECREATION_LEAD,
TLEAD.DATEMODIFICATION AS DATEMODIFICATION_LEAD,
TLEAD.STATUT AS STATUT_LEAD,
TLEAD.ABANDONREFUSID,
TLEAD.ABANDONMOTIF AS COMMENTAIRE
FROM WORK.CAMPAGNE_LEADS TCAMP
LEFT JOIN INFOCE.INFO_SESAME_CAMP_LEAD TLEAD ON (TCAMP.IDCAMPAGNE = TLEAD.CAMPAGNEID)
WHERE TLEAD.DATECREATION >= "01JAN2020:00:00:00"dt /* DATE CORRESPONDANT AU DEBUT DU SUIVI LEADS PAR RAPPORT A LA CREATION DU LEAD*/
;
QUIT;
PROC SQL;
CREATE TABLE LISTE_LEADS AS
SELECT DISTINCT
TLEAD.*,
THOFF.OFFREID,
TOFF.LIBELLE AS FAMILLE_OFFRE
FROM WORK.LISTE_LEADS TLEAD
LEFT JOIN INFOCE.INFO_SESAME_CAMP_LEAD_H_OFFRE THOFF ON (THOFF.LEADID = TLEAD.IDLEAD)
LEFT JOIN INFOCE.INFO_SESAME_CAMP_LEAD_OFFRE TOFF ON (THOFF.OFFREID = TOFF.IDOFFRE)
;
QUIT;
PROC SQL;
CREATE TABLE LISTE_LEADS AS
SELECT DISTINCT
TLEAD.*,
TREFUS.LIBELLE AS RAISON_ABANDON
FROM WORK.LISTE_LEADS TLEAD
LEFT JOIN INFOCE.INFO_SESAME_CAMP_REFUS TREFUS ON (TLEAD.ABANDONREFUSID = TREFUS.IDREFUS)
;
QUIT;
/* AJOUT INFOS SUR LA SOCIETE PORTEUSE DU LEAD */
PROC SQL;
CREATE TABLE SOCIETE AS
SELECT DISTINCT
TSOC.IDSOCIETE,
TSOC.SIREN,
TSOC.RAISONSOCIALE,
TSOC.EFFECTIFSFR,
TSOC.SEGMENT,
TSOC.SEGMENTSFR
FROM WORK.LISTE_LEADS TLEAD
LEFT JOIN INFOCE.INFO_SESAME_SOCIETE TSOC ON (TLEAD.PARENTID = TSOC.IDSOCIETE)
;
QUIT;
/* AJOUTS DES INFORMATIONS SUR LE PROPRIETAIRE DU LEAD */
PROC SQL;
CREATE TABLE UTILISATEUR AS
SELECT DISTINCT
TLEAD.UTILISATEURID,
TUSER.IDUTILISATEUR,
TUSER.ACTIF,
TUSER.UPERID,
CATS(TUSER.NOM,"_",TUSER.PRENOM) AS PROPRIETAIRE_LEAD,
TUSER.DISTRIBUTEURID,
TUSEREX.CODEPDV,
TUSEREX.NOMPDV AS PDV_EXTERNE,
TUSEREX.ENSEIGNE AS ENSEIGNE_EXTERNE,
TUSEREX.LIBELLEREGIONSFR AS REGION_EXTERNE,
TUSERIN.SECTEUR_RATTACHEMENT AS PDV_INTERNE,
CASE WHEN TUSER.ACTIF = "T" THEN "ACTIF" ELSE "compte non sectorisé" END AS UTILISATEUR_ACTIF
FROM WORK.LISTE_LEADS TLEAD
LEFT JOIN INFOCE.INFO_SESAME_UTILISATEUR TUSER ON (TLEAD.UTILISATEURID = TUSER.IDUTILISATEUR)
LEFT JOIN INFOCE.INFO_SESAME_UTIL_SEC_EXTER TUSEREX ON (TUSER.IDUTILISATEUR = TUSEREX.IDUTILISATEUR)
LEFT JOIN INFOCE.INFO_SESAME_UTIL_SEC_INTER TUSERIN ON (TUSER.IDUTILISATEUR = TUSERIN.UTILISATEURID)
;
QUIT;
/* COMPILATION DES PROGRAMMES CI DESSUS */
PROC SQL;
CREATE TABLE CIBLAGE AS
SELECT DISTINCT
TLEAD.*,
TSOC.*,
TUTIL.*
FROM WORK.LISTE_LEADS TLEAD
LEFT JOIN WORK.SOCIETE TSOC ON (TLEAD.PARENTID = TSOC.IDSOCIETE)
LEFT JOIN WORK.UTILISATEUR TUTIL ON (TLEAD.UTILISATEURID = TUTIL.IDUTILISATEUR)
;
QUIT;
Can you provide a few rows of your two data sets (WORK.VENTES_TOTALE and WORK.CIBLAGE), following these instructions: https://blogs.sas.com/content/sastraining/2016/03/11/jedi-sas-tricks-data-to-data-step-macro/
Bonjour,
Merci pour votre aide, mais c'est bon j'ai trouvé une solution à mon problème.
J'ai modifié la rédaction de ma fonction. Et comme j'utilise ma table de sortie sur le logiciel TABLEAU SOFTWARE je peux filtrer mes données que je ne souhaite pas.
PROC SQL;
CREATE TABLE VENTES_CAMPAGNE AS
SELECT DISTINCT
TVEN.SIREN,
TRESUL.UTILISATEURID,
TVEN.OFFRE_VENTES,
TVEN.FAMILLE_VENTES,
TVEN.DATE_VALIDE2 AS DATE_ED_VENTE,
TVEN.PRI_IC AS MONTANT_PRI_VENTE,
TRESUL.DATEFIN_CAMPAGNE,
/*intnx('dtmonth',TRESUL.DATECREATION_LEAD,+4) AS DFC_3 FORMAT=DATETIME16.,1er Methode */
TRESUL.DATECREATION_LEAD
FROM WORK.VENTES_TOTALE TVEN /* NOM DU PROGRAMME A MODIFIER LIGNE 596 */
LEFT JOIN WORK.CIBLAGE TRESUL ON (TRESUL.SIREN = TVEN.SIREN)
/*INNER JOIN WORK.RESUL_AFF_BASIC TRESUL ON (TRESUL.SIREN = TVEN.SIREN)*/
WHERE TVEN.DATE_VALIDE2 <= intnx('dtmonth',TRESUL.DATECREATION_LEAD,+4) /*2ème Methode
GROUP BY 1,2,3*/
;
QUIT;
DATA WORK.VENTES_CAMPAGNE ;
SET WORK.VENTES_CAMPAGNE ;
IF DATECREATION_LEAD >= DATE_ED_VENTE then delete ;
/*IF DFC_3 <= DATE_ED_VENTE then delete ;1er Methode */
/*IF DATECREATION_LEAD <= DATE_ED_VENTE then delete ;2ème Methode */
RUN ;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.