我有一个如下所示的数据集:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="topStory">
<div class="photo">
<a href="somelink"><img src="someimage.jpg" border="0" alt="Photo"></a>
</div>
<h2><a href="somelink">Text near to someimage.jpg</a></h2>
<p>Some extra text.</p>
</div>
我需要将其更改为:
weight | malf
3.18456 0
4.2433 1
3.8543 0
4.0123 1
4.15 1
所以我的数据集会增加一倍 如果现在尝试了一段时间,但我找不到方法。 有没有办法做到这一点?
答案 0 :(得分:2)
这是一个应该适合您的通用解决方案。它将所有数值变量放入数组中。对于每个观察,它按顺序循环遍历所有数值变量,并执行以下操作顺序:
读取存储在数组中的变量 i 的名称,并将其吐出到变量Type。
读取变量 i 的值并将其吐出到变量Response。
输出,然后返回并使用数字变量 i +1执行相同的操作。每次观察都要冲洗并重复。
data want;
length Type $10.;
set have;
array numvars[*] _NUMERIC_;
do i = 1 to dim(numvars);
Type = vname(numvars[i]);
Response = numvars[i];
output;
end;
keep Type Response;
run;
答案 1 :(得分:0)
这是专门用于输入的代码。第一个数据步骤重新创建数据。第二个输出你需要的东西。我假设通过&#34;加倍大&#34;你的意思是观察的两倍。
/*recreate input file*/
data aa;
weight =3.18456; malf= 0;
output;
weight =4.2433 ; malf= 1;
output;
weight =3.8543 ; malf= 0;
output;
weight =4.0123 ; malf= 1;
output;
weight =4.15 ; malf= 1;
output;
run;
/*output file*/
data bb;
set aa;
type="weight"; respons=weight;
output;
type="malf"; respons=malf;
output;
run;
答案 2 :(得分:0)
即使使用非数值变量,此解也有效。
%macro transpose_like;
/* With this step we save all the column names in the columns_dataset */
proc contents data=start_dataset out=columns_dataset(keep=name) noprint;
run;
/* With the symputx routine we save dinamically the column names to N macro variables */
data _null_;
set columns_dataset end=eof;
call symputx("Var"||strip(_N_),strip(name));
if eof then
call symputx("Var_Number",strip(_N_));
run;
/* Finally we write the output_dataset: for every row of start_dataset we output N rows */
data output_dataset(keep=var value);
length var $ 20 value $20;
set start_dataset;
%do i=1 %to &Var_Number.;
var = "&&Var&i.";
value = strip(&&Var&i.);
output;
%end;
run;
%mend transpose_like;
/* Call the macro */
%transpose_like