V SAS: Jak vlajky jedinečných kombinací sady hodnot proměnných

hlasů
2

V SAS, jak mohu vytvořit identifikátor pro každou jedinečnou kombinaci sady proměnných?

Mám například jen několik tisíc pozorování s dichotomického hodnotu za šest proměnných. K dispozici jsou 2 ^ 6 jedinečné kombinace pro hodnoty těchto proměnných pro každý pozorování. Chtěl bych vytvořit identifikátor pro každou jedinečnou kombinaci, a nakonec skupina mých pozorování podle této hodnoty.

Mít:

SubjectID     Var1     Var2     Var3     Var4     Var5     Var6
---------------------------------------------------------------
ID1           1        1        1        1        1        1        
ID2           1        0        1        1        1        1  
ID3           0        1        1        1        1        1  
ID4           0        0        1        1        1        0  
...           ...      ...      ...      ...      ...      ...
ID3000        1        1        0        1        0        0  

chcete:

SubjectID     Var1     Var2     Var3     Var4     Var5     Var6     Identifier
------------------------------------------------------------------------------
ID1           1        1        1        1        1        1        A        
ID2           1        1        1        1        1        1        A
ID3           0        1        1        1        1        1        B  
ID4           0        0        1        1        1        0        C  
...           ...      ...      ...      ...      ...      ...
ID3000        1        1        0        1        0        0        Z

Aby představovala 1, 1, 1, 1, 1, 1 jako jedinečné kombinaci a Bbude představovat číslo 0, 1, 1, 1, 1, 1 atd.

Přemýšlel jsem o vytvoření fiktivní proměnnou založenou na 64 VAR1-Var6 podmíněné příkazy. Také jsem přemýšlel o zřetězení hodnot z VAR1-Var6 do nového řádku vytvořit jedinečný identifikátor.

Existuje přímější způsob, jak jít o tom?

Dávám přednost přístupu, který přiřazuje specifický identifikátor specifické kombinace hodnot, spíše než ten, který právě vytváří nějaký libovolný jedinečný řetězec kdykoli nová kombinace přijde.

Položena 27/11/2018 v 17:55
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Přehled Proc dobře funguje s volbou úrovně. Tato metoda funguje pro všechny hodnoty proměnných skupin číselných nebo znakových.

data have;
   input (v1-v6)(1.);
   cards;
111111
111110
111101
111011
110111
;;;;
proc print;
proc summary data=have nway;
   class v1-v6;
   output out=unique(drop=_type_) / levels;
   run;

zadejte popis obrázku zde

Odpovězeno 28/11/2018 v 00:35
zdroj uživatelem

hlasů
0

Za předpokladu, že data jsou řazeny dle vašich seskupení proměnných, pak stačí použít zpracováním skupiny.

data want;
  set have;
  by var1-var6 ;
  groupid + first.var6 ;
run;

Nebo můžete prostě převést 6 binárních proměnných do jednoho jedinečnou hodnotu.

group2 = input(cats(of var1-var6),binary6.);

To má přidanou hodnotu že nevyžaduje, aby třídit data, ale to potřeba žádného z seskupování proměnných, které mají být chybí.

Výsledek

SubjectID  Var1 Var2 Var3 Var4 Var5 Var6 Identifier Want groupno group2
ID4  0  0  1  1  1  0 C  1  14
ID3  0  1  1  1  1  1 B  2  31
ID1  1  1  1  1  1  1 A  3  63
ID2  1  1  1  1  1  1 A  3  63
Odpovězeno 27/11/2018 v 20:37
zdroj uživatelem

hlasů
0

Pomocí jedinečné hodnoty kombinací daného proměnných a pak vytvoření abecedního seznamu čísel, můžete vytvořit výsledek

data inp;
length combined $6.;
input subjectid $4. v1 1. v2 1. v3 1. v4 1. v5 1. v6 1.;
combined=compress(v1||v2||v3||v4||v5||v6);
datalines;
ID1 111111
ID2 011111
ID3 001111
ID4 111110
ID5 000111
ID6 111111
ID7 000111
;
run;

proc sql;
create table uniq
as
select distinct combined from inp order by combined desc;
quit;

data uniq1;
 set uniq;
 retain alphabet 65;
 Id=byte(alphabet) ;
 alphabet+1;

 drop alphabet;
run;

proc sql;
create table final_ds
as
select subjectid, v1, v2, v3, v4, v5, v6, Id
from inp a
left join uniq1 b
on a.combined=b.combined;
quit;
Odpovězeno 27/11/2018 v 19:00
zdroj uživatelem

hlasů
0

Proč ne jen zřetězit hodnoty? Takže vaše kombinace jsou:

111111
111110
111101
111011
110111
....

Můžete použít PROC FREQ kontrolovat počet každého typu.

proc freq data=have;
table var1*var2*var3*var4*var5*var6 / out=want list;
run;
Odpovězeno 27/11/2018 v 18:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more