Più Condizioni/variabili all’interno di un IF-then istruzione SAS

Ho un set di dati che ha due variabili sto cercando di creare nuovi gruppi. La prima variabile è “religiosità” e la seconda è “Av_Anti”, entrambi sono variabili di tipo numerico. Sto cercando di creare gruppi di separare in 9 gruppi, con bassa/media/alta religiosità E low/mid/high Av_Anti.

DATA LYING1;
SET LYING;
    IF RELIGIOSITY = (1 OR 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
    IF RELIGIOSITY = (1 OR 2) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "LowR,MidA";
    IF RELIGIOSITY = (1 OR 2) AND Av_anti >7 THEN Rel_Anti = "LowR,HighA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti <=3 THEN Rel_Anti = "MidR,LowA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "MidR,MidA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti >7 THEN Rel_Anti = "MidR,HighA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti <=3 THEN Rel_Anti = "HighR,LowA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "HighR,MidA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti >7 THEN Rel_Anti = "HighR,HighA";
    ELSE Rel_Anti = "Error";
RUN;

Continuo a ricevere il messaggio di

  "The function AV_ANTI is unknown, or cannot be accessed." 

La cosa è, ho controllato che variabile, il suo scritto correttamente e che il suo elencati nella chiamata del set di dati. Non so perché SAS non sia in grado di riconoscere come una variabile? Ho anche sembrano essere sempre alcuni problemi con gli operatori logici (i >, <=). Mi manca qualcosa?

InformationsquelleAutor Mike L | 2014-12-07



One Reply
  1. 7

    Hai valido SAS di Sintassi nei suoi confronti e intervalli.
    Si dovrebbe utilizzare l’operatore di controllo per l’inclusione in un elenco di valori e, quindi, di confrontare ogni variabile confini per ogni confronto. (cioè non
    Non:

    Av_anti (>3 AND <=7) 
    

    Ma:

    Av_anti>3 and Av_anti<=7
    

    o :

    3<AV_atni<=7
    

    Il seguente dovrebbe funzionare. Penso anche che si intende avere altro se, piuttosto che tutti se tutto, altrimenti la tua ultima condizione imposta tutti per Errore o LowR/MidA.

    DATA LYING1;
    SET LYING;
        IF RELIGIOSITY in (1, 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
        ELSE IF RELIGIOSITY in  (1, 2) AND (Av_anti >3 AND AV_anti<=7) THEN Rel_Anti = "LowR,MidA";
        ...
        ELSE Rel_Anti = "Error";
    RUN;
    

    Potrebbe essere una soluzione migliore:

    Data lying1;
        set lying;
        IF RELIGIOSITY in (1, 2) then P1='LowR';
        else IF RELIGIOSITY in (3, 4, 5) then P1='MidR';
        else IF RELIGIOSITY in (6,7) then P1='HighR';
        else P1='Error';
    
        if av_anti<=3 then P2='LowA';
        else if  3<av_anti<=7 then P2='MidA';
        else if AV_Anti>7 then 'HighA';
        else P2='Error';
    
        Rel_Anti=catx(",", P1, P2);
    run;
    
    • Grande risposta, elegante e al punto.

Lascia un commento