2016-01-19 88 views
-2

我有以下矩阵:
matrixSAS矩阵变量名的数据集

我想它隐蔽到SAS数据集中在以下格式:
SAS dataset

lastname丢失,如果是相同的作为前一个,我有成千上万的名字。我应该怎么做?

+0

什么创建了矩阵?矩阵的图片是否有打印输出? – floydn

+0

你说矩阵 - 你的意思是SAS IML矩阵还是在Excel中是矩阵格式?如果Excel,你是否已经将它导入SAS? – Reeza

+0

这很可能是第一次观察结转问题,需要您使用保留。为了遵守SO规则,请发布您尝试过的内容。 – Reeza

回答

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 
;;;; 

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

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; 
0

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

按照说明这里摆脱空白“lastnames”沿着顶部和侧面: 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转置,但清理它并堆叠它是最基本的想法。