Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sas矩阵到具有变量名的数据集_Sas - Fatal编程技术网

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

sas矩阵到具有变量名的数据集,sas,Sas,我有以下矩阵: 我想以以下格式将其转换为SAS数据集: lastname如果与前一个相同,并且我有数千个名字,则它将丢失。我该怎么做?您只能将平面文件导入SAS,因此您需要先清理一下标题 按照此处的说明清除顶部和侧面的空白“姓氏”: 一旦没有空格,我想将名字和姓氏连接到一个单元格中是最容易的。类似于=沿顶部连接(C1,C2)和=沿侧面连接(A4 | B4)的东西应该可以实现这一技巧 仅将连接的值复制并粘贴到其自身上,以删除公式。然后删除原始值 你应该以这样的方式结束: 现在,导入SAS并

我有以下矩阵:

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


lastname
如果与前一个相同,并且我有数千个名字,则它将丢失。我该怎么做?

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

按照此处的说明清除顶部和侧面的空白“姓氏”:

一旦没有空格,我想将名字和姓氏连接到一个单元格中是最容易的。类似于=沿顶部连接(C1,C2)和=沿侧面连接(A4 | B4)的东西应该可以实现这一技巧

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

你应该以这样的方式结束:

现在,导入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复制和粘贴列一样简单


希望您没有太多的名称来压倒proc转置,但是清理并堆叠它是基本的想法。

您可以告诉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;

是什么创造了矩阵?矩阵的图片是打印输出吗?你说的矩阵-你是指SAS IML矩阵还是Excel中的矩阵格式?如果是Excel,您是否已将其导入SAS?这很可能是第一个观察结转问题,需要您使用retain。要遵守SO规则,请发布您尝试过的内容。这是excel中的一个矩阵,我还没有将其导入sas,不确定如何将其读入sas,以便将其转换为我需要的格式。您的列标题看起来向左移动了一列。