sas矩阵到具有变量名称的数据集

时间:2016-01-19 21:12:39

标签: sas

我有以下矩阵:
matrix

我想以下列格式将其转换为SAS数据集:
SAS dataset

如果它与前一个相同,则缺少

lastname,并且我有数千个名字。我该怎么做?

2 个答案:

答案 0 :(得分:0)

您只能将平面文件导入SAS,因此您需要先清理标题。

按照此处的说明删除顶部和侧面的空白“姓氏”: http://www.extendoffice.com/documents/excel/771-excel-fill-blank-cells-with-value-above.html

一旦没有空白,我认为将名字和姓氏连接成一个单元格是最容易的。顶部有一个类似= CONCATENATE(C1,C2)的东西,而旁边的= CONCATENATE(A4 | B4)应该可以解决这个问题。

仅将连接的复制并粘贴到自身上以删除公式。然后删除原始值。

你应该得到这样的结论:Screenshot of Excel Data Ready to Import

现在,导入SAS并使用如下所示的程序堆叠值:

PROC TRANSPOSE DATA = import_from_excel
OUT=data_stacked
;
BY Names;
VAR 
    lastname1firstname1 
    lastname1firstname2 
    lastname1firstname3 
    lastname1firstname4 
    lastname1firstname5 
    lastname2firstname1 
    lastname2firstname2 
    lastname2firstname3 
    lastname2firstname4 
    lastname2firstname5
;
RUN;

您显然必须更改lastnameXfirstnameX值以匹配您拥有的值,但它应该像从Excel复制和粘贴A列一样简单。

希望你没有这么多的名字来压倒proc转置,但清理和堆叠它是基本的想法。

答案 1 :(得分:0)

您可以告诉SAS导入没有名称的“矩阵”。这将使您能够将名称作为数据读取,并强制所有变量为字符串。所以基本上你会得到像这样的数据集。

data have ;
  length f1-f6 $32 ;
  infile cards dsd truncover ;
  input f1-f6 ;
cards;
,,L1,,L2
,,F1,F2,F3,F4
,,,,,,                  
L3,F5,1,2,3,4
,F6,5,6,7,8
L4,F7,9,10,11,12
,F8,13,14,15,16
;;;;

然后,您可以处理数据集并生成from / to name变量。首先创建一个引用所有变量的数组。然后创建两个临时数组来存储列标题名称。然后,当您读取每一行时,您可以从该行中找到名称和值并输出它们。

data want ;
  set have nobs=nobs ;
  array x _character_ ;
  array ln (200) $32 _temporary_;
  array fn (200) $32 _temporary_;
  length from_lastn lag_lastn from_firstn to_lastn to_firstn $32 ;
  from_lastn = coalescec(x(1),lag_lastn);
  lag_lastn = from_lastn ;
  retain lag_lastn ;
  from_firstn = x(2) ;
  if _n_=1 then do i=3 to dim(x) ;
    ln(i)=coalescec(x(i),ln(i-1));
  end;
  if _n_=2 then do i=3 to dim(x) ;
    fn(i)=x(i);
  end;
  if _n_>3 then do i=3 to dim(x) ;
    to_lastn = ln(i);
    to_firstn= fn(i);
    value=input(x(i),comma32.);
    output;
  end;
  keep from_lastn from_firstn to_lastn to_firstn value ;
run;
相关问题