克隆列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我想克隆數據表中的一列(創建一個新的相同列,但名稱除外)。 是否有更時尚(且穩健)的方法來執行此操作,或者我是否需要提取值和所有屬性並將它們分配給新列,如下所示:
dt3 =打開( “$SAMPLE_DATA/Cars.jmp” ) ;
// 添加列屬性
dt3 :製作<<設置屬性(
《價值色彩》 ,
{ “謳歌” = - 13977687 , “奧迪” = - 3780931 , “寶馬” = - 4222943 , “別克” = -
13596966 , “卡迪拉克” = - 2211217 , “雪佛蘭” = - 10562780 , “克萊斯勒” = -
13156647 , “大發” = - 2078390 , “躲閃” = - 13182413 , “鷹” = - 9549600 ,
“福特” = - 2334147 , “地理” = - 13772446 , “本田” = - 9282864 , “現代” = -
6995852 , “英菲尼迪” = - 1524612 , “五十鈴” = - 9458080 , “吉普車” = - 14452073 ,
“雷克薩斯” = - 6391856 , “林肯” = - 2745505 , “馬自達” = - 10199751 , “梅賽德斯” =
- 7150697 , “汞” = - 10513726 , “三菱” = - 8381519 , “日產” = -
3502441 , “奧茲莫比爾” = - 3615440 , “標致” = - 13925307 , “普利茅斯” = -
11502354 , “龐蒂亞克” = - 7449196 , “雷諾” = - 9229791 , “薩博” = - 4074344 ,
“土星” = - 13050224 , “斯巴魯” = - 12565885 , “鈴木” = - 2068529 , “豐田” =
- 4494272 , “大眾汽車” = - 11824110 , “沃爾沃” = - 8734293 , “尤戈” = - 13849421 }
) <<按值對單元格著色;
// 克隆列
克隆列= dt3 :製作<<獲取腳本;
克隆列;
回复:克隆列不,這種解釋是完全錯誤的。
編寫 JMP 腳本通常涉及使用內置 JMP 對象,例如數據表、數據列或分析平台。 您可以通過向對象發送指示所需操作的消息來使用這些對象。 兩個版本中都顯示了一般形式:使用實際的 JMP 函數和使用等效運算符。
Send( object, message );
object << message;
該對象由參考值表示。 消息由名稱表示。 這個例子的解釋如下:
dt3:Make << Get Script
發送消息獲取腳本到稱為的對象dt3:製作。 該參考使用以下形式表:列。 對數據表的引用先前存儲在變量中dt3 。 對列的引用是按名稱進行的。
消息獲取腳本可以發送到任何 JMP 對象。 每個對像都會覆蓋此消息背後的“getter”方法,以返回重新生成原始對象的腳本。 也就是說,它返回將克隆對象的代碼。 因此,您始終可以使用相同的消息來獲取任何對象的唯一代碼。
回复:克隆列感謝您的解釋和快速回复。 我猜想 Get 是 jmp“內置”並運行的腳本的名稱。 否則它怎麼知道克隆列而不是執行其他操作。 從你的回復中我學到了很多。
回复:克隆列讓我們按照表達式的計算順序來計算。
dt3:Make << Get script
該消息將導致 JMP 返回創建同一列的 JSL 代碼。
Eval(dt3:Make << Get script)
JSL 代碼經過評估後會生成一個新數據列,該數據列是原始 :Make 列的副本。 Eval() 函數還將返回對該新列的引用。
Eval(dt3:Make << Get script) << set name("Clone");
最後,向新列發送消息以使用對象引用更改新列的名稱。
回复:克隆列您好,MS,您介意解釋一下這個命令如何克隆 dt 中選定的列嗎? Eval(dt3:Make << 獲取腳本) << 設置名稱("克隆");我意識到這通常不是這裡提出的問題,那是 5 年前的事了,但這是我在我使用過的任何編程語言中見過的最不透明的命令。 不過我工作得很好!回复:克隆列謝謝多發性硬化症,
確實,顏色在私人餐桌上用處不大。
問題是我正在編寫一個基於啟發式過程的算法。這意味著我需要一個腳本,如果我必須自己逐一“讀取”數據行並解釋它(這是我需要顏色的地方),它就能完成我要做的事情。另一方面,腳本在運行時需要快速,所以我需要在我看到的表和快速運行的表(私有)之間反彈和第四。可視化表和私有表之間的這種轉換在跨幾個開放表編寫腳本時引入了魯棒性挑戰。
羅恩
回复:克隆列我真的不確定在私有表中保留列屬性(例如值顏色)有什麼價值。如果您只關心數據(對於私有表來說通常如此),則可以使用以下更簡單的方法:
dt3 <<新專欄( “製作克隆人” ,公式( dt3 :製作))
回复:克隆列謝謝Dave@Pega-Analytics特克斯尼爾森,
這就是我一直在尋找的。沒想到復制一個專欄這麼麻煩。
以下是我的最終腳本:
名稱默認為此處( 1 ) ;
dt3 =打開( “$SAMPLE_DATA/Cars.jmp” ,私人的) ;
// 克隆到同一個表中
評估(解析( “(dt3<<” ||字符( dt3 :製作<<獲取腳本) || ") << 設置名稱(\!"克隆\!");" )) ;
// 證明該列已被克隆 - 檢查日誌
dt3 :克隆<<獲取腳本;
關閉( dt3 ,沒有保存) ;
最好的,
羅恩
回复:克隆列以下是在前面添加數據表指針的一種方法的完整示例:
Eval(Parse("(dtxxx<<"||char(dt3:Make << 獲取腳本)||") << 設置名稱(\!"克隆\!");"));
回复:克隆列您可以通過在評估之前編輯腳本變量來使其更加健壯,即在表達式前面添加“dt <<”。
回复:克隆列使用私有表時會出現魯棒性問題,因為克隆被發送到另一個非私有表。
回复:克隆列謝謝多發性硬化症,
我很驚訝沒有 jsl 命令用於復制現有列。此外,如果 dt3 不是活動表,它會在另一個表中創建新列。
回复:克隆列這對我來說看起來非常時尚。 您是否遇到過魯棒性方面的問題?
如果你不想在變量上浪費內存,可以將其簡化為 int OA 線:
評估( dt3 :製作<<獲取腳本) <<設置名稱( “克隆” ) ;
為了克隆多個列,我會考慮製作其中的子集,重命名列並使用原始數據表進行更新。