在SAS或Proc Sql中合并同一表中的单元格

时间:2015-02-25 16:47:14

标签: sql merge null sas

我有一个表格,其中包含一个客户列,后面是多列(与商店相关)和一个标志,表明他们是否访问了这家商店,如果他们没有,则该单元格为空。商店按重要性排列,Shop1最高,shop2,shop3等等。说明顾客是否访问过该特定商店的标志是与商店号码相关的号码。因此,例如,如果客户没有访问过shop1,那么这将是空白的,但如果他们访问了shop2,则此单元格将为' 2'

我需要将列合并在一起,以创建一个表,每个客户都有他们访问过的前4个商店,例如,客户的条目可以读取第一列' 2',第二列栏目' 5',第三栏' 7',第四栏' 8'因为他们没有访问过1,3,4或6号商店。有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西。获取输入数据(我假设你的意思),执行转置,过滤丢失的(null)值,然后重新转置。

data input;
input customer $ shop01 shop02 shop03 shop04;
datalines;
Bill 1 2 . .
Ted  . 2 3 .
;

proc sort data=input;
by customer;
run;

proc transpose data=input out=temp(where=(col1 ^= .) drop=_name_);
by customer;
run;

proc transpose data=temp out=output(drop=_name_);
by customer;
run;

这给了我:

Bill 1 2
Ted  2 3

答案 1 :(得分:0)

考虑到数据的布局方式,您可以将smallest函数与变量列表一起使用,以返回商店变量中第一个最小的非缺失值,第二个最小,依此类推。

data test(drop=shop01-shop08);
  set input;
  first  = smallest(1,of shop01-shop08);
  second = smallest(2,of shop01-shop08);
  third  = smallest(3,of shop01-shop08);
  fourth = smallest(4,of shop01-shop08);
run;
相关问题