Se qualcuno può aiutare con questo, lo apprezzerei molto!
Sto cercando di creare una variabile categoriale che rifletta i cambiamenti nell'occupazione in base a due variabili: JOBCODE TimePoint 2 e JOBCODE TimePoint 2.
In sostanza, questa variabile categorica mi consentirà di vedere se un determinato dipendente ha uno dei seguenti eventi dal punto di tempo 1 al punto di tempo 2: aderire all'organizzazione (nuovo impiegato), cambiare JOBCODE (trasferito all'interno dell'organizzazione) o lasciare l'organizzazione ( terminazione / separazione).
Il codice seguente rappresenta la mia struttura di dati perché tutti i nuovi dipendenti avranno un valore vuoto / nullo per il loro JOBCODE al Timepoint 1, tutti i dipendenti licenziati avranno un valore vuoto / nullo per JOBCODE al Timepoint 2 e tutti i dipendenti che hanno cambiato posizione avranno un JOBCODE non corrispondente nel campo da Timepoint 1 a Timepoint 2.
Per quanto riguarda il comando blank / null, ho provato diverse cose. Ho provato a usare isMissing e == “” e ho anche provato! Contiene. Nessuno di loro funziona. Non ho una preferenza su quale di questi stili viene utilizzato finché funziona.
Per quei dipendenti che si trasferiscono, sono interessato solo a mantenere un codice di lavoro contenuto nella mia lista
Ho creato una tabella di dati falsi. La colonna 1 contiene alcuni ID di dipendenti inventati a titolo di esempio. Le colonne 2 e 3 rappresentano i codici lavoro in Timepoint 1 e Timepoint 2. La colonna 4 è l'output che mi aspetterei in base ai valori immessi nelle colonne 2 e 3. La colonna 5 contiene alcune note per chiarimenti.
new column ("JOBCODE Status", Character, Nominal) << Formula
(If (Contains (mylist, :"JOBCODE Timepoint1") & !Contains (mylist, :"JOBCODE Timepoint2"),"Change in JOBCODE",
(If (Contains (mylist, :"JOBCODE Timepoint1") & Contains (mylist, :"JOBCODE Timepoint2"),"No Change",
(If (Contains (mylist, :"JOBCODE Timepoint1") & isMissing (:"JOBCODE Timepoint2"),
"Termination/Separation",
(If (isMissing (mylist, :"JOBCODE Timepoint1") & Contains (:"JOBCODE Timepoint2"),
"New Employee",
))))))));
mylist= {"HH0029",
"HH0030",
"HH0241",
"HH0242",
"HH0317",
"HH0635",
"HH0635",
"HH0636",
"HH0636",
"HH0639",
"HH0742",
"HH0750",
"HX0002",
"HX0003",
"HX0008",
"HX0010",
"HX0022",
"HX0106",
"HX0106",
"HX0107",
"HX0114",
"HX0115",
"SH0049",
"SH0504",
"SH0678",
"HH0113",
"HH0708",
"HH0746",
"HX0111",
"NU0017",
"NU0100",
"NU0200",
"NU0203",
"NU0206",
"NU0207",
"NU0213",
"NU0243",
"NU0244",
"NU0300",
"NU0301",
"NU0305",
"NU0327",
"NU0328",
"NU0362",
"NU0364",
"NU0400",
"NU0422",
"NU0423",
"NU0424",
"NU0425",
"NU0440",
"NU0461",
"NU0615",
"NU0618",
"NU0619",
"NU0620",
"NU0621",
"NU0622",
"NU0625",
"NU0800",
"NU0801",
"NU0923",
"NX0002",
"NX0006",
"NX0017",
"NX0018",
"NX0019",
"NX0023",
"NX0125",
"NX0465",
"NX0466",
"NX0609",
"NX0610",
"NU0610",
"NU0700",
"NU0710",
"NU0713",
"NU0922",
"NU0364",
"NX0609",
"NX0610"};Ecco la mia rielaborazione del tuo codice che sembra funzionare
New Column( "myJOBCODE Status", Character, Nominal ) << Formula(
If( Row() == 1,
mylist = {"HH0029", "HH0030", "HH0241", "HH0242", "HH0317", "HH0635", "HH0635", "HH0636", "HH0636", "HH0639", "HH0742",
"HH0750", "HX0002", "HX0003", "HX0008", "HX0010", "HX0022", "HX0106", "HX0106", "HX0107", "HX0114", "HX0115", "SH0049",
"SH0504", "SH0678", "HH0113", "HH0708", "HH0746", "HX0111", "NU0017", "NU0100", "NU0200", "NU0203", "NU0206", "NU0207",
"NU0213", "NU0243", "NU0244", "NU0300", "NU0301", "NU0305", "NU0327", "NU0328", "NU0362", "NU0364", "NU0400", "NU0422",
"NU0423", "NU0424", "NU0425", "NU0440", "NU0461", "NU0615", "NU0618", "NU0619", "NU0620", "NU0621", "NU0622", "NU0625",
"NU0800", "NU0801", "NU0923", "NX0002", "NX0006", "NX0017", "NX0018", "NX0019", "NX0023", "NX0125", "NX0465", "NX0466",
"NX0609", "NX0610", "NU0610", "NU0700", "NU0710", "NU0713", "NU0922", "NU0364", "NX0609", "NX0610"}
);
isThere = Function( {value},
{},
If( Contains( mylist, value ),
1,
0
)
);
a = :JOBCODE Timepoint1;
b = :JOBCODE Timepoint2;
If(
isThere( a ) & b == "", "Termination/Separation",
a == "" & isThere( b ), "New Employee",
isThere( a ) & isThere( b ), "No Change"
);
);