Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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
Variables SAS:对许多变量重新排序_Variables_Sas_Data Manipulation - Fatal编程技术网

Variables SAS:对许多变量重新排序

Variables SAS:对许多变量重新排序,variables,sas,data-manipulation,Variables,Sas,Data Manipulation,我有一个超过250个变量的数据集。我已经创建了几个需要放置在特定位置的新变量(如第37个变量或第113个变量等),但是它们被添加到了列表的末尾 我已经研究过retain语句,但是它要求我按照我想要的顺序列出所有变量。有人能建议一条捷径吗?下面是一些代码: data &CRF._1 (drop= studyParticipantCode formid participantID

我有一个超过250个变量的数据集。我已经创建了几个需要放置在特定位置的新变量(如第37个变量或第113个变量等),但是它们被添加到了列表的末尾

我已经研究过retain语句,但是它要求我按照我想要的顺序列出所有变量。有人能建议一条捷径吗?下面是一些代码:

data &CRF._1 (drop= studyParticipantCode                
                formid 
                participantID
                formStatusID 
                contactItemID
                lastTab
                phaseID  
                notCompleted 
                notCompletedReasonID 
                notCompletedReasonOther);
retain patid cycleID OwnerTypeID &Qn._MM -- &Qn._YYYY &Qn._MDY &Qn._INTERVIEWER -- &Qn._TIMEENDED &Qn._TIMETOTAL
        &Qn._1 -- &Qn._12AYYYY &Qn._12MDY &Qn._13 -- &Qn._13AYYYY &Qn._13MDY &Qn._14 -- &Qn._14AYYYY &Qn._14MDY
        &Qn._14b1 -- &Qn._15AYYYY &Qn._15aMDY &Qn._15B -- &Qn._15BYYYY &Qn._15bMDY &Qn._15C -- &Qn._15CYYYY &Qn._15cMDY
        &Qn._15D -- &Qn._15DYYYY &Qn._15dMDY  &Qn._16 -- &Qn._31A3YYYY &Qn._31aMDY &Qn._31A4A -- &Qn._31B3YYYY
        &Qn._31bMDY &Qn._31B4A -- &Qn._31C3YYYY &Qn._31cMDY &Qn._31C4A -- &Qn._31D3YYYY &Qn._31dMDY &Qn._31D4A -- &Qn._31E3YYYY
        &Qn._31eMDY &Qn._31E4A -- &Qn._31F3YYYY &Qn._31fMDY &Qn._31F4A -- &Qn._31G3YYYY &Qn._31gMDY &Qn._31G4A -- &Qn._31H3YYYY
        &Qn._31hMDY &Qn._31H4A -- &Qn._31I3YYYY &Qn._31iMDY;
set &CRF.;
Site            = substr(patid,6,4);
Sitecycle       = strip(Site)||strip(put(&byvar.,5.));
%inc labels;
%inc formats;
我尝试了varN--varM,因为这两个变量之间可能有3到20个我不想输入的变量(因为我将对多个数据集重复这一点)。以下是我产生的错误:

错误:在先前定义的变量列表中找不到变量Q11_MM。 错误:在先前定义的变量列表中找不到变量Q11_面试官。 错误:在先前定义的变量列表中找不到变量Q11_1。 等等

任何帮助都将不胜感激

-Brandon

您不能使用--(双破折号)符号,因为
retain
工作的唯一原因是它在数据集变量进入PDV之前运行;一旦SAS看到这些变量,它就会按照看到它们的顺序分配它们,并且您不能更改它们的位置。但是,双破折号表示法要求PDV中已经有这些变量,因此这两个概念(重新排序变量和双破折号表示法)冲突

对于完全在SAS中执行的操作,没有很好的解决方案。最简单的解决方案是使用
proc contents
输出,或者类似地使用SQL中的
dictionary.columns
来获取列表;但你仍然需要以某种方式增加这一点

我推荐的最佳解决方案是创建一个excel电子表格(或CSV或类似文件),其中包含您的变量,按照您希望的顺序排列。您可以使用
VARNUM
选项从
PROC CONTENTS
开始生成该变量,该选项按当前变量顺序(而不是按字母顺序)对变量进行排序

然后导入该电子表格,并在RETAIN语句中使用它

proc import file="mydatadictionary.xlsx" out=datadict dbms=excel replace;
run;

proc sql;
select name into :orderlist separated by ' '
from datadict
where active=1
order by var_order;
quit;

data want;
retain &orderlist.;
set have;
run;

以上假设您的数据字典电子表格(我称之为-也包含变量、格式等信息)有列
name
(变量名称),
var\u order
(数据集中的顺序),以及
active
为1或空白(active variables 1,不再是active variables 0或空白).

您在做什么,使特定变量必须位于特定的列号中?似乎应该有一个比在特定位置放置列更好的路线。我发现虽然-,不起作用(如答案中所解释的),但单破折号确实起作用。当变量名足够相似时,它可以为您节省时间,尽管我不确定您的数据集中是否存在这种情况。坦率地说,我不明白在这方面,和之间的区别从何而来。