cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • See how to interactively organize and restructure data for analysis. Register for May 29 webinar, 2pm US ET.

Discussions

Solve problems, and share tips and tricks with other JMP users.
%3CLINGO-SUB%20id%3D%22lingo-sub-270441%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%E5%8F%96%E6%B6%88%E5%A0%86%E7%96%8A%E7%9A%84%20Excel%20%E5%84%B2%E5%AD%98%E6%A0%BC%E6%88%96%E8%A7%A3%E6%9E%90%E8%87%AA%E7%94%B1%E6%A0%BC%E5%BC%8F%E6%96%87%E5%AD%97%E4%BB%A5%E7%94%A2%E7%94%9F%E5%A4%9A%E8%A1%8C%3C%2FLINGO-SUB%3E%0A%20%20%3CLINGO-BODY%20id%3D%22lingo-body-270441%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%0A%20%20%20%3CP%3E%E6%88%91%E5%80%91%E9%83%BD%E6%9B%BE%E7%B6%93%E9%81%87%E9%81%8E%E9%80%99%E7%A8%AE%E6%83%85%E6%B3%81%EF%BC%9AExcel%20%E8%A1%A8%E6%A0%BC%E6%A0%BC%E5%BC%8F%E7%BE%8E%E8%A7%80%EF%BC%8C%E5%8D%BB%E5%AE%8C%E5%85%A8%E6%B2%92%E6%9C%89%E8%80%83%E6%85%AE%E5%8F%AF%E5%88%86%E6%9E%90%E6%80%A7%E3%80%82%3C%2FP%3E%0A%20%20%20%3CP%3E%E5%9C%A8%E8%87%AA%E7%94%B1%E6%96%87%E5%AD%97%E5%96%AE%E5%85%83%E6%A0%BC%E4%B8%AD%EF%BC%8C%E5%AE%83%E7%9C%8B%E8%B5%B7%E4%BE%86%E5%83%8F%E9%80%99%E6%A8%A3%EF%BC%9A%3C%2FP%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CP%3Em%2Fd%EF%BC%9A%E6%96%87%E6%9C%AC%20%5Balt%2Benter%5D%3CBR%20%2F%3E%20m%2Fd%EF%BC%9A%E6%96%87%E6%9C%AC%20%5Balt%2Benter%5D%3CBR%20%2F%3E%20m%2Fd%EF%BC%9A%E6%96%87%E6%9C%AC%20%5Balt%2Benter%5D%3CBR%20%2F%3E%20m%2Fd%EF%BC%9A%E6%96%87%E6%9C%AC%20%5Balt%2Benter%5D%3CBR%20%2F%3E%20%E2%80%A6%3CBR%20%2F%3E%20m%2Fd%EF%BC%9A%E6%96%87%E6%9C%AC%20%5Balt%2Benter%5D%3C%2FP%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CP%3E%E7%95%B6%E8%B3%87%E6%96%99%E5%8C%AF%E5%87%BA%E5%88%B0%20JMP%20%E6%99%82%EF%BC%8C%E5%84%B2%E5%AD%98%E6%A0%BC%E6%9C%83%E6%8A%98%E7%96%8A%E6%88%90%EF%BC%9Am%2Fd%3A%20%E6%96%87%E5%AD%97%20m%2Fd%3A%20%E6%96%87%E5%AD%97%20m%2Fd%3A%20%E6%96%87%E5%AD%97%20...%20m%2Fd%3A%20%E6%96%87%E5%AD%97%E3%80%82%3CBR%20%2F%3E%E6%88%91%E5%B8%8C%E6%9C%9B%E5%B0%87%E5%8C%85%E5%90%AB%20n%20%E5%80%8B%E5%85%83%E7%B4%A0%E7%9A%84%E9%95%B7%E5%AD%97%E4%B8%B2%E8%A7%A3%E6%9E%90%E6%88%90%E4%B8%80%E8%A1%8C%EF%BC%8C%E6%AF%8F%E5%80%8B%E5%85%83%E7%B4%A0%E4%BD%94%E4%B8%80%E8%A1%8C%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%88%86%E6%88%90%E5%A4%9A%E5%88%97%E3%80%82%20n%20%E6%98%AF%E5%8F%AF%E8%AE%8A%E7%9A%84%E3%80%82%E9%80%99%E5%B0%87%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E6%96%B0%E7%9A%84%E8%B3%87%E6%96%99%E8%A1%A8%EF%BC%8C%E8%A4%87%E8%A3%BD%E5%85%B6%E4%BB%96%E5%88%97%E4%B8%A6%E6%96%B0%E5%A2%9E%E8%A7%A3%E6%9E%90%E5%BE%8C%E7%9A%84%E5%85%83%E7%B4%A0%E3%80%82%E9%80%99%E4%B8%A6%E9%9D%9E%E6%96%87%E5%AD%97%E5%88%86%E5%88%97%EF%BC%8C%E8%80%8C%E6%98%AF%E6%96%87%E5%AD%97%E5%88%86%E6%88%90%E5%A4%9A%E8%A1%8C%E3%80%82%3C%2FP%3E%0A%20%20%20%3CP%3E%E5%B9%B8%E5%A5%BD%20%23%2F%23%20%E7%9A%84%E4%BD%BF%E7%94%A8%E5%BE%88%E7%A9%A9%E5%AE%9A%EF%BC%8C%E6%89%80%E4%BB%A5%E6%88%91%E5%8F%AF%E4%BB%A5%E7%B5%B1%E8%A8%88%E9%80%99%E4%BA%9B%E5%80%BC%E4%B8%A6%E5%BE%AA%E7%92%B0%20n%20%E6%AC%A1%E3%80%82%3C%2FP%3E%0A%20%20%20%3CP%3E%E6%9C%89%E6%B2%92%E6%9C%89%E4%BA%BA%E5%81%9A%E9%81%8E%E9%A1%9E%E4%BC%BC%E7%9A%84%E4%BA%8B%E6%83%85%EF%BC%9F%3C%2FP%3E%0A%20%20%3C%2FLINGO-BODY%3E%0A%20%20%3CLINGO-LABS%20id%3D%22lingo-labs-270441%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%0A%20%20%20%3CLINGO-LABEL%3E%E5%A4%A7%E8%A6%8F%E6%A8%A1%E5%AE%A2%E8%A3%BD%E5%8C%96%3C%2FLINGO-LABEL%3E%0A%20%20%3C%2FLINGO-LABS%3E%0A%20%0A%3CLINGO-SUB%20id%3D%22lingo-sub-270461%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%A0%86%E7%96%8A%E5%A0%86%E7%96%8A%E7%9A%84Excel%E5%96%AE%E5%85%83%E6%A0%BC%E6%88%96%E8%A7%A3%E6%9E%90%E8%87%AA%E7%94%B1%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%96%87%E6%9C%AC%E4%BB%A5%E7%94%9F%E6%88%90%E5%A4%9A%E8%A1%8C%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-270461%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E6%88%91%E7%B6%93%E5%B8%B8%E5%81%9A%E9%80%99%E7%A8%AE%E4%BA%8B%E6%83%85%EF%BC%9B%E6%82%A8%E5%8F%AA%E9%9C%80%E8%A6%81%E7%80%8F%E8%A6%BD%E5%AE%83%E3%80%82%26nbsp%3B%20%E9%80%99%E6%98%AF%E4%B8%80%E5%80%8B%E7%A4%BA%E4%BE%8B%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%88%971%E5%85%B7%E6%9C%89%E5%A4%9A%E5%80%8B%E5%80%BC%EF%BC%8C%E8%80%8C%E5%88%972%E6%98%AF%E9%9D%9C%E6%85%8B%E7%9A%84%E3%80%82%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3Edt%20%3D%20New%20Table(%20%22Test%22%2C%20Add%20Rows(%203%20)%2C%20Set%20Cell%20Height(%2083%20)%2C%0A%20New%20Column(%20%22Column%201%22%2C%20Character%2C%20%22Nominal%22%2C%0A%20%20Set%20Values(%0A%7B%225%2F3%3A%20ABCDE%0A5%2F4%3A%20DEF%0A5%2F5%3A%20GHI%22%2C%0A%225%2F6%3A%20xyz%0A5%2F7%3A%20foo%0A5%2F8%3A%20bar%0A5%2F9%3A%20Hello%0A5%2F10%3A%20World%22%2C%0A%224%2F16%3A%20The%0A4%2F17%3A%20Entire%0A4%2F18%3A%20Scheme%0A4%2F19%3A%20Of%0A4%2F20%3A%20Things%0A4%2F21%3A%20Is%20broken%22%7D%20)%2C%0A%20%20Set%20Display%20Width(%20156%20)%0A%20)%2C%0A%20New%20Column(%20%22Column%202%22%2C%20Character%2C%20%22Nominal%22%2C%20Set%20Values(%20%7B%22A%22%2C%20%22B%22%2C%20%22C%22%7D%20)%20)%0A)%3B%0A%0Adtnew%20%3D%20new%20table(%22Text_to_Rows%22%2C%0A%20new%20column(%22Column%201%22%2C%20Character%2C%20%22Nominal%22)%2C%0A%20new%20column(%22Column%202%22%2C%20Character%2C%20%22Nominal%22)%2C%0A)%3B%0A%0Adelim%20%3D%20%22%0A%22%3B%0Am%20%3D%200%3B%0Afor%20(i%20%3D%201%2C%20i%20%26lt%3B%3D%20nrows(dt)%2C%20i%2B%2B%2C%0A%20c1_words%20%3D%20words(dt%3Acolumn%201%5Bi%5D%2C%20delim)%3B%0A%20one_c2%20%20%20%3D%20dt%3Acolumn%202%5Bi%5D%3B%0A%0A%20for%20(k%20%3D%201%2C%20k%20%26lt%3B%3D%20nitems(c1_words)%2C%20k%2B%2B%2C%0A%20%20dtnew%20%26lt%3B%26lt%3B%20add%20rows(1)%3B%0A%20%20m%2B%2B%3B%0A%20%20dtnew%3AColumn%201%5Bm%5D%20%3D%20c1_words%5Bk%5D%3B%0A%20%20dtnew%3AColumn%202%5Bm%5D%20%3D%20one_c2%3B%0A%20)%3B%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-270777%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%A0%86%E7%96%8A%E5%A0%86%E7%96%8A%E7%9A%84Excel%E5%96%AE%E5%85%83%E6%A0%BC%E6%88%96%E8%A7%A3%E6%9E%90%E8%87%AA%E7%94%B1%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%96%87%E6%9C%AC%E4%BB%A5%E7%94%9F%E6%88%90%E5%A4%9A%E8%A1%8C%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-270777%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E5%BD%BC%E5%BE%97%EF%BC%9A%20%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%AC%9D%E8%AC%9D%EF%BC%81%E5%81%9A%E5%88%B0%E4%BA%86%E3%80%82%E6%88%91%E6%AC%A0%E6%82%A8%E9%81%B8%E6%93%87%E7%9A%84%E9%A3%B2%E6%96%99%E3%80%82%3CBR%20%2F%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E8%88%87%E6%95%B8%E6%93%9A%E7%9A%84%E5%89%B5%E5%BB%BA%E8%80%85%E5%90%88%E4%BD%9C%EF%BC%8C%E4%BB%A5%E5%B9%B3%E9%9D%A2%E6%A0%BC%E5%BC%8F%E8%BC%B8%E5%85%A5%E6%95%B8%E6%93%9A...%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-270789%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%A0%86%E7%96%8A%E5%A0%86%E7%96%8A%E7%9A%84Excel%E5%96%AE%E5%85%83%E6%A0%BC%E6%88%96%E8%A7%A3%E6%9E%90%E8%87%AA%E7%94%B1%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%96%87%E6%9C%AC%E4%BB%A5%E7%94%9F%E6%88%90%E5%A4%9A%E8%A1%8C%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-270789%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E5%93%88%E5%93%88%E8%81%BD%E8%B5%B7%E4%BE%86%E4%B8%8D%E9%8C%AF%E3%80%82%26nbsp%3B%20%E5%B8%8C%E6%9C%9B%E8%83%BD%E5%9C%A82020%E5%B9%B4%E7%99%BC%E7%8F%BE%E6%82%A8%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E
Choose Language Hide Translation Bar
markschahl
Level VI

Unstacking a Stacked Excel Cell or Parsing Free-form Text to Generate Multiple Rows

We all run into some version of this: Excel table formatted to look nice, no thought given to analyzability.

In the free-form text cell, it looks like this:

 

m/d: text [alt+enter]
m/d: text [alt+enter]
m/d: text [alt+enter]
m/d: text [alt+enter]
...
m/d: text [alt+enter]

 

When the data are exported to JMP, the cell gets collapsed into: m/d: text m/d: text m/d: text ... m/d: text.
I want to parse that long string with n elements into a separate row for each element, not split into separate columns. n is variable. This would create a new datatable that copies the other columns and adds the parsed element. Instead of Text-to-Columns, this is Text-to-More-Rows.

Thankfully #/# is used consistently, so I could count those and loop n times.

Has anyone out there done something similar?

1 ACCEPTED SOLUTION

Accepted Solutions
pmroz
Super User

Re: Unstacking a Stacked Excel Cell or Parsing Free-form Text to Generate Multiple Rows

I do this sort of thing a lot; you just have to slog through it.  Here's an example where Column 1 has multiple values, and Column 2 is static.

dt = New Table( "Test", Add Rows( 3 ), Set Cell Height( 83 ),
	New Column( "Column 1", Character, "Nominal",
		Set Values(
{"5/3: ABCDE
5/4: DEF
5/5: GHI",
"5/6: xyz
5/7: foo
5/8: bar
5/9: Hello
5/10: World",
"4/16: The
4/17: Entire
4/18: Scheme
4/19: Of
4/20: Things
4/21: Is broken"} ),
		Set Display Width( 156 )
	),
	New Column( "Column 2", Character, "Nominal", Set Values( {"A", "B", "C"} ) )
);

dtnew = new table("Text_to_Rows",
	new column("Column 1", Character, "Nominal"),
	new column("Column 2", Character, "Nominal"),
);

delim = "
";
m = 0;
for (i = 1, i <= nrows(dt), i++,
	c1_words = words(dt:column 1[i], delim);
	one_c2   = dt:column 2[i];

	for (k = 1, k <= nitems(c1_words), k++,
		dtnew << add rows(1);
		m++;
		dtnew:Column 1[m] = c1_words[k];
		dtnew:Column 2[m] = one_c2;
	);
);

 

View solution in original post

3 REPLIES 3
pmroz
Super User

Re: Unstacking a Stacked Excel Cell or Parsing Free-form Text to Generate Multiple Rows

I do this sort of thing a lot; you just have to slog through it.  Here's an example where Column 1 has multiple values, and Column 2 is static.

dt = New Table( "Test", Add Rows( 3 ), Set Cell Height( 83 ),
	New Column( "Column 1", Character, "Nominal",
		Set Values(
{"5/3: ABCDE
5/4: DEF
5/5: GHI",
"5/6: xyz
5/7: foo
5/8: bar
5/9: Hello
5/10: World",
"4/16: The
4/17: Entire
4/18: Scheme
4/19: Of
4/20: Things
4/21: Is broken"} ),
		Set Display Width( 156 )
	),
	New Column( "Column 2", Character, "Nominal", Set Values( {"A", "B", "C"} ) )
);

dtnew = new table("Text_to_Rows",
	new column("Column 1", Character, "Nominal"),
	new column("Column 2", Character, "Nominal"),
);

delim = "
";
m = 0;
for (i = 1, i <= nrows(dt), i++,
	c1_words = words(dt:column 1[i], delim);
	one_c2   = dt:column 2[i];

	for (k = 1, k <= nitems(c1_words), k++,
		dtnew << add rows(1);
		m++;
		dtnew:Column 1[m] = c1_words[k];
		dtnew:Column 2[m] = one_c2;
	);
);

 

markschahl
Level VI

Re: Unstacking a Stacked Excel Cell or Parsing Free-form Text to Generate Multiple Rows

Peter:

Thanks! That did the trick. I owe you a drink of your choice.
I am working on the creators of the data to input the data in flat format...

pmroz
Super User

Re: Unstacking a Stacked Excel Cell or Parsing Free-form Text to Generate Multiple Rows

Ha ha sounds good.  Hope to see you at Discovery 2020.

Recommended Articles