如何在不同组合行中创建SAS中的列

  • 本文关键字:创建 SAS 组合 sql excel sas proc
  • 更新时间 :
  • 英文 :


我有一个带有864行的数据集。我想创建一个单独的列"组",具有不同的128个屏幕,电池,RAM,处理器,HD_SIZE,BUNDLED_APP,INT_WIRE的组合。

SCREEN BATTERY RAM  PROCESSOR HD_SIZE Bundled_App Int_Wire
------- ------- ---- --------- ------- ----------- -------- 
SMALL   LOW    LOW    LOW      LOW       Yes       Yes
SMALL   LOW    LOW    LOW      LOW       No        Yes
SMALL   LOW    LOW    LOW      LOW       Yes       Yes
SMALL   LOW    LOW    LOW      LOW       No        Yes
SMALL   LOW    LOW    LOW      LOW       Yes       Yes
SMALL   LOW    LOW    LOW      LOW       No        Yes
SMALL   LOW    LOW    LOW      HIGH      Yes       Yes
SMALL   LOW    LOW    LOW      HIGH      No        Yes
SMALL   LOW    LOW    LOW      LOW       Yes       No
SMALL   LOW    LOW    LOW      LOW       No        No

解决方案数据应如下所示:

SCREEN BATTERY RAM  PROCESSOR HD_SIZE Bundled_App Int_Wire  Group
------- ------- ---- --------- ------- ----------- -------- ------
SMALL   LOW    LOW    LOW      LOW       Yes       Yes     Group 1
SMALL   LOW    LOW    LOW      LOW       No        Yes     Group 120
SMALL   LOW    LOW    LOW      LOW       Yes       Yes     Group 1
SMALL   LOW    LOW    LOW      LOW       No        Yes     Group 120
SMALL   LOW    LOW    LOW      LOW       Yes       Yes     Group 1
SMALL   LOW    LOW    LOW      HIGH      Yes       Yes     Group 2

这实际上是一个整洁的问题。我认为您的变量可以采用的值是低和高或是,否。我从您有7个变量和2^7 = 128。

中得到的

要获取您正在寻找的转换表的组,以便所有低值和所有值是0,所有的是,高值是1。您现在有一个七位数的二进制号码。将该二进制号转换回小数等效物,您将获得一个从0到127的数字。

如果将值编码为0/1而不是文本字符串,则没有丢失的值,则很容易将n个二进制变量转换为单个数字从0到(2 **)n -1)。

group=input(cats(of var1-var7),binary7.) ;

您可以添加一个以使数字从1到128,而不是从0到127。

如果您只想找到所有现有的组合,则可以使用诸如Proc摘要之类的soemantion来查找组合,然后添加计数器。或排序并首先使用。处理以添加计数器。

proc sort data=have ;
  by SCREEN BATTERY RAM  PROCESSOR HD_SIZE Bundled_App Int_Wire ;
run;
data groups;
  set have;
  by SCREEN BATTERY RAM  PROCESSOR HD_SIZE Bundled_App Int_Wire ;
  group + first.Int_Wire;
run;

,但这只能处理您数据中实际出现的组合。如果重复其他数据集的过程,则可以将相同组合分配给其他组号。

如果您知道每个变量的可能值,则可以生成所有可能组合的数据集。然后合并两个数据集或生成格式并使用它。

data groups;
  if 0 then set have (keep=SCREEN BATTERY RAM  PROCESSOR HD_SIZE Bundled_App Int_Wire);
  do SCREEN='SMALL','LARGE';
  do BATTERY='LOW','HIGH';
  do RAM='LOW','HIGH';
  do PROCESSOR='LOW','HIGH';
  do HD_SIZE='LOW','HIGH';
  do Bundled_App='No','Yes';
  do Int_Wire='No','Yes';
    group +1 ;
    output;
  end;
  end;
  end;
  end;
  end;
  end;
  end;
run;

对于这些极端之间的事物,您可以要求Proc Freq生成数据中值的所有可能组合。

proc freq data=have  ;
  tables SCREEN*BATTERY*RAM*PROCESSOR*HD_SIZE*Bundled_App*Int_Wire
       / sparse noprint out=groups 
  ;
run;
data groups;
  set groups ;
  group + 1;
run;

但是,如果某些值,例如屏幕='大型',从不出现在数据中,则不会出现在组中。

相关内容

  • 没有找到相关文章

最新更新